~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 9,001 GitHub stars. SynthScan v2.0 examined 1,226,610 lines of code across 3290 source files, recording 40275 pattern matches distributed across 26 syntactic categories. The overall adjusted score of 45.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 40275 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 | 211 | def _compute_wrapper_import_hint(self) -> str: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 320 | def _apply_definite_subject_assignments( | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 369 | def _pattern_exception_aliases( | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 654 | def _is_literal_dynamic_import(node: ast.AST, module: str) -> bool: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 746 | def _check_import_from_secure_dir(self, node: ast.ImportFrom) -> None: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 1208 | def _check_exc_info_on_warning(self, node: ast.Call) -> None: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 1230 | def _check_exception_var_in_log(self, node: ast.Call) -> None: | CODE |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 1365 | 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 |
| 29054 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 | 99 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .file-whitelist.txt | 102 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 424 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 426 | # --------------------------------------------------------------------------- | 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 | 166 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 201 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .grype.yaml | 214 | # -------------------------------------------------------------------------- | COMMENT |
| MEDIUM | .grype.yaml | 256 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 264 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 292 | # ========================================================================== | COMMENT |
| MEDIUM | .grype.yaml | 294 | # ========================================================================== | 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 | 78 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 82 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 86 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 89 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 92 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 98 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 103 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 109 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 112 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 118 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 122 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 130 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 134 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 137 | # ============================================================================ | COMMENT |
| 5396 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 | 281 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-env-vars.py | 282 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-env-vars.py | 299 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-env-vars.py | 300 | print(f"Error parsing {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/check-pathlib-usage.py | 177 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/check-pathlib-usage.py | 178 | 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/check-no-src-test-imports.py | 111 | except Exception as e: # pragma: no cover - unreadable file | CODE |
| MEDIUM | .pre-commit-hooks/check-no-src-test-imports.py | 112 | print(f"Error reading {filename}: {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 | 543 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/custom-checks.py | 544 | print(f"Error reading {filename}: {e}") | CODE |
| LOW | .pre-commit-hooks/custom-checks.py | 570 | except Exception as e: | CODE |
| MEDIUM | .pre-commit-hooks/custom-checks.py | 571 | 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 | 1521 | 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 |
| 1893 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 | 381 | # Create a test client | COMMENT |
| MEDIUM | tests/conftest.py | 643 | # 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 | 158 | # Create a mock LLM instance | COMMENT |
| MEDIUM | tests/test_api_key_configuration.py | 181 | # Create a mock LLM instance | COMMENT |
| MEDIUM | tests/test_api_key_configuration.py | 216 | # Create a mock LLM instance | COMMENT |
| MEDIUM | tests/test_api_key_configuration.py | 239 | # 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 | 3709 | # Create an engine with invalid credentials in URL | COMMENT |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 4047 | # Create a mock migrations directory structure | COMMENT |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 4052 | # 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 | 1141 | # Create a conflicting table structure | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 2284 | # Create a partial state - some tables but not all | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 2786 | # Create a very long string | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 3673 | # Create a read-only directory scenario | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 3844 | # Create a scenario that will cause a migration error | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 3990 | # Create a mock symlinked path scenario | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 4073 | # Create a mock migrations directory with secure files | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 4097 | # Create a mock migrations directory (permissions don't matter) | COMMENT |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 4464 | # Create a fresh Alembic database | STRING |
| MEDIUM⚡ | tests/database/test_alembic_migrations.py | 4469 | # 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 | 919 | # Create a plain SQLite database (no encryption needed for this test) | COMMENT |
| MEDIUM⚡ | tests/database/backup/test_backup_service.py | 2296 | # Create a fake database file | COMMENT |
| MEDIUM⚡ | tests/database/backup/test_backup_service.py | 2304 | # Create a backup directory with a double quote in the path | COMMENT |
| 276 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/vector_stores/test_no_plaintext_property.py | 0 | every on-disk file under ``root`` that contains ``needle`` (raw bytes). | STRING |
| HIGH | …sts/vector_stores/test_no_plaintext_production_path.py | 0 | every on-disk file under ``root`` that contains ``needle`` (raw bytes). | STRING |
| HIGH | tests/vector_stores/test_cross_tenant_isolation.py | 0 | every on-disk file under ``root`` that contains ``needle`` (raw bytes). | STRING |
| HIGH | tests/research_library/test_document_full_lifecycle.py | 0 | every on-disk file under ``root`` that contains ``needle`` (raw bytes). | 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/test_openai_base.py | 0 | supply a provider_key on the abstract base for these direct tests. openaicompatibleprovider intentionally declares no `` | STRING |
| HIGH | tests/llm/providers/test_openai_base.py | 0 | supply a provider_key on the abstract base for these direct tests. openaicompatibleprovider intentionally declares no `` | STRING |
| HIGH | tests/llm_providers/test_openai_base.py | 0 | supply a provider_key on the abstract base for these direct tests. openaicompatibleprovider intentionally declares no `` | STRING |
| HIGH | tests/llm/providers/test_openai_base_deep_coverage.py | 0 | supply a provider_key on the abstract base for these direct tests. openaicompatibleprovider intentionally declares no `` | 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 | …lm_providers/implementations/test_requesty_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 | tests/security/test_login_cached_connection_password.py | 0 | a databasemanager writing to an isolated data directory. | STRING |
| HIGH | …s/security/test_change_password_evicts_stale_engine.py | 0 | a databasemanager writing to an isolated data directory. | STRING |
| HIGH | …ecurity/test_login_cached_connection_password_extra.py | 0 | a databasemanager writing to an isolated data directory. | STRING |
| HIGH | …ity/test_login_cached_connection_password_lifecycle.py | 0 | a databasemanager writing to an isolated data directory. | 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 |
| 114 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | .gitleaks.toml | 162 | # RAG routes and services use db_password variable names (not actual secrets) | COMMENT |
| MEDIUM⚡ | .gitleaks.toml | 165 | # RAG service factory passes db_password variable names (not actual secrets) | COMMENT |
| MEDIUM⚡ | .gitleaks.toml | 168 | # the RAG factory (not actual secrets) | COMMENT |
| MEDIUM | docker-compose.yml | 235 | # 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/vector_stores/test_legacy_cleanup_no_plaintext.py | 135 | # Symlink it under the RAG cache root — os.walk will skip it silently. | COMMENT |
| MEDIUM | tests/vector_stores/test_legacy_cleanup_no_plaintext.py | 161 | # A symlink to it under the RAG cache root. | COMMENT |
| MEDIUM | tests/vector_stores/test_legacy_cleanup_no_plaintext.py | 197 | # EVERY file under the RAG cache — nothing plaintext left on disk. | COMMENT |
| MEDIUM | …sts/vector_stores/test_no_plaintext_production_path.py | 306 | # Real service, only the embedding model faked (no network/model load). | COMMENT |
| MEDIUM⚡ | tests/vector_stores/test_faiss_store.py | 359 | # (embedding model/config changed) must fail closed on apply()'s | COMMENT |
| MEDIUM⚡ | tests/vector_stores/test_facade.py | 318 | # index_prepared() — bulk path used by parallel RAG indexing (PR #5235) | COMMENT |
| MEDIUM⚡ | tests/vector_stores/test_legacy_rekey_orchestrator.py | 210 | # test needs -- point the RAG cache root at tmp_path so it runs | COMMENT |
| MEDIUM | tests/database/test_alembic_migrations.py | 6081 | # 0018: restoring 'mcp'/'agentic' strategy references would recreate | COMMENT |
| MEDIUM | …/advanced_search_system/tools/test_library_resolver.py | 44 | """Regression for #5381: RAG citations are emitted as | STRING |
| MEDIUM⚡ | tests/advanced_search_system/tools/test_fetch_modes.py | 383 | # The library RAG engine and the collection engine emit | COMMENT |
| MEDIUM | tests/embeddings/test_openai_embeddings.py | 890 | """The headline regression for #4195: a Nomic embedding model | STRING |
| MEDIUM | tests/deletion/test_cascade_integration.py | 315 | # Add RAG index | COMMENT |
| MEDIUM⚡ | tests/deletion/test_cascade_integration.py | 409 | # 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/security/test_password_redaction_invariant.py | 73 | # Phase-2 RAG re-key: rekey_user_indexes(username, db_password) holds the | COMMENT |
| MEDIUM | tests/js/pages/note-detail.test.js | 43 | // renderWikiLinkPlaceholder early-return — no DOM scaffold needed. | COMMENT |
| MEDIUM | tests/js/pages/note-detail-ai-handlers.test.js | 157 | // The remaining list-style handlers share the same scaffold; lock each one's | COMMENT |
| MEDIUM | tests/research_library/test_document_full_lifecycle.py | 335 | # Phase 3: delete the document from RAG. Search must return | COMMENT |
| MEDIUM | tests/research_library/test_document_full_lifecycle.py | 371 | # The Document row itself must still exist (this is a RAG-removal, | 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 | 1191 | q.first.return_value = None # No RAG index | CODE |
| MEDIUM | …ts/research_library/routes/test_rag_routes_coverage.py | 1291 | q.first.return_value = None # No RAG index | CODE |
| MEDIUM | …ts/research_library/routes/test_rag_routes_coverage.py | 1351 | q.first.return_value = None # No RAG index | CODE |
| MEDIUM | …search_library/routes/test_rag_routes_deep_coverage.py | 1141 | 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 | 949 | # (RAG, last_run commit) sees a clean session. | COMMENT |
| MEDIUM⚡ | …rch_library/services/test_download_service_3827_fix.py | 957 | # Change 3 (continued): RAG indexing of research downloads has been RETIRED from | COMMENT |
| MEDIUM⚡ | …rch_library/services/test_download_service_3827_fix.py | 960 | # assert the inline RAG block is gone: generate_rag no longer drives any RAG | 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_unified_search_routes.py | 369 | # and the current RAG index names (.filter().all()). | COMMENT |
| MEDIUM⚡ | tests/web/routes/test_metrics_routes_coverage.py | 220 | # 5 strategies after the 'mcp'/'agentic' strategy was removed (#4548): | COMMENT |
| MEDIUM | tests/web/routes/test_research_routes_policy.py | 501 | # Strategy aliases ("langgraph_agent", "mcp", "agentic") must also | 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/run_legacy_pkl_migration.sh | 2 | # One-command LOCAL runner for the legacy plaintext-.pkl RAG migration E2E test. | COMMENT |
| MEDIUM | tests/ui_tests/test_rag_index_search_ci.js | 168 | await page.type("#collection-name", `RAG E2E ${Date.now()}`); | 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 | …playwright/tests/notes/notes-modal-close-paths.spec.js | 11 | * /notes/<id> #indexModal — index for RAG | COMMENT |
| 160 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 | 477 | 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 | 261 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 320 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 369 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 527 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 678 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 746 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 925 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 1024 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 1077 | CODE | |
| LOW | .pre-commit-hooks/check-sensitive-logging.py | 1365 | 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 | 204 | CODE | |
| LOW | tests/test_openai_api_key_e2e.py | 44 | CODE | |
| LOW | tests/test_llm_provider_integration.py | 206 | CODE | |
| LOW | tests/test_llm_provider_integration.py | 342 | 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/metrics/test_token_counter_coverage.py | 205 | 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 | 4194 | CODE | |
| LOW | tests/database/test_alembic_migrations.py | 6527 | 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 | |
| 708 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 | 445 | # Check if line has allowed patterns first | COMMENT |
| LOW | .pre-commit-hooks/custom-checks.py | 503 | # Check if this file is allowed to use datetime.now() | COMMENT |
| LOW | .pre-commit-hooks/custom-checks.py | 522 | # 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 | 1160 | # 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 | 2459 | # 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 | 150 | # 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 | 122 | # Check if the URL exists in backend (with some flexibility for parameter names) | COMMENT |
| LOW | tests/infrastructure_tests/test_urls_js.py | 347 | # 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 | 836 | # 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 |
| 280 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 | 603 | 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 | 140 | 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 | 300 | 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 | 469 | Create a properly initialized SQLCipher connection. Follows the canonical SQLCipher initialization order: set k | STRING |
| HIGH | …ced_search_system/filters/journal_reputation_filter.py | 715 | 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 | 40 | 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 | 105 | 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 | 52 | Create OpenAI embeddings instance. Args: model: Model name (defaults to text-embedding-3-s | STRING |
| HIGH | …esearch/embeddings/splitters/text_splitter_registry.py | 62 | 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/paths.py | 136 | Get the database filename for a specific user. Args: username: The username to generate a filename for | 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 | 150 | 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 | 298 | 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 | 622 | `safe_get` plus exponential-backoff retry on transient errors. Retries on: * ``requests.ConnectionError`` | STRING |
| HIGH | …local_deep_research/security/notification_validator.py | 1071 | Strict validation that raises an exception on invalid URLs. Args: url: Service URL to vali | STRING |
| HIGH | src/local_deep_research/security/directory_creation.py | 38 | Create a directory through the audited security chokepoint. Rejects null bytes and raw ``..`` traversal, resolves t | 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 | 391 | 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 | 420 | 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 | 190 | 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 | …local_deep_research/research_library/utils/__init__.py | 453 | Get absolute path using settings manager for library root. Uses PathValidator to prevent path traversal attack | STRING |
| HIGH | …eep_research/research_library/routes/library_routes.py | 77 | Get authenticated user password from session store with fallback to g.user_password. Args: username: T | STRING |
| HIGH | …research/research_library/services/download_service.py | 468 | 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 | 51 | 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 |
| 40 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 | …/advanced_search_system/tools/test_library_resolver.py | 12 | CODE | |
| LOW | tests/advanced_search_system/tools/test_fetch_modes.py | 8 | CODE | |
| LOW | tests/connected/conftest.py | 1 | CODE | |
| LOW | tests/connected/test_queue_submission_persistence.py | 1 | CODE | |
| LOW | tests/connected/test_queue_atomic_claim.py | 1 | CODE | |
| LOW | tests/connected/test_research_submission_policy.py | 1 | CODE | |
| LOW | tests/connected/test_auth_database_lifecycle.py | 1 | CODE | |
| LOW | tests/connected/test_library_document_conversion.py | 1 | CODE | |
| LOW | tests/connected/test_queue_claim_reclaim.py | 1 | CODE | |
| LOW | tests/connected/queue_test_support.py | 1 | 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 | 33 | 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_noncollection_agent_enabled.py | 26 | CODE | |
| LOW | tests/security/test_egress_classification.py | 7 | CODE | |
| LOW | tests/security/test_egress_unprotected.py | 8 | CODE | |
| LOW | …library/downloaders/test_playwright_html_ssrf_guard.py | 29 | CODE | |
| LOW | tests/web/test_research_sources_url_selection.py | 13 | CODE | |
| LOW | tests/web/test_save_research_sources_hostile_values.py | 14 | 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/text_optimization/test_bibliography_escaping.py | 10 | CODE | |
| LOW | …t_optimization/test_citation_formatter_bibliography.py | 9 | 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_policy_denied.py | 36 | CODE | |
| LOW | tests/mcp/test_server.py | 14 | CODE | |
| 498 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 | 481 | # | 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 | # for user-visible changes worth highlighting. | 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 | # -------------------------------------------------------------------------- | COMMENT |
| LOW | .grype.yaml | 261 | # NOT hide unknown, so an explicit entry is needed (empirically confirmed: | COMMENT |
| LOW | .grype.yaml | 401 | COMMENT | |
| LOW | .grype.yaml | 501 | # fixed CVE-2026-8328, -9669, -7774, -3276 — those entries were removed. | COMMENT |
| LOW | .gitleaks.toml | 321 | '''auth_token\s*=\s*session\.get\("temp_auth_token"\)''', | 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 | COMMENT | |
| LOW | docker-compose.yml | 101 | # Get your API key from https://openrouter.ai/ | COMMENT |
| LOW | docker-compose.yml | 121 | # The extra_hosts setting above enables this on Linux. | COMMENT |
| LOW | docker-compose.yml | 141 | soft: -1 | COMMENT |
| LOW | docker-compose.yml | 181 | condition: service_started | COMMENT |
| LOW | eslint.config.js | 241 | "chai-friendly/no-unused-expressions": "error", | 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 | # - escapeHtml() inline fallbacks in component files | COMMENT |
| LOW | bearer.yml | 101 | # Observable timing alerts (javascript_lang_observable_timing) | 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 | 6081 | # 0018: restoring 'mcp'/'agentic' strategy references would recreate | COMMENT |
| LOW | tests/database/test_settings_models.py | 421 | # Note: onupdate might not trigger in SQLite without proper configuration | COMMENT |
| LOW | tests/database/test_migration_0021_note_tables.py | 81 | 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/auth_tests/test_auth_rate_limiting.py | 521 | # 3. Fast-forward time by 15 minutes (using time mocking) | COMMENT |
| LOW | tests/chat/conftest.py | 21 | # with ``SettingsManager`` and ``get_user_db_session`` bound as | COMMENT |
| LOW | tests/chat/test_chat_send_message_followups.py | 201 | ), | 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 | 341 | 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_egress_settings_save_validators.py | 801 | COMMENT | |
| LOW | …s/security/test_settings_secret_redaction_isolation.py | 281 | "notifications.service_url": "***REDACTED***", | 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/setup.js | 41 | // Shared notes helpers (window.NotesShared.postJson/csrfToken/toast) — in | COMMENT |
| LOW | tests/js/collection-details.test.js | 261 | here, | COMMENT |
| LOW | tests/js/components/logpanel.test.js | 401 | beforeEach(() => { | COMMENT |
| LOW | tests/js/components/logpanel.test.js | 481 | // each run addLogEntryToPanel's full-container querySelectorAll scans | COMMENT |
| LOW | tests/js/components/logpanel.test.js | 1141 | it("falls back to the button's label text (excluding the badge) when data-filter-type is missing", () => { | COMMENT |
| LOW | tests/js/components/logpanel.test.js | 1201 | COMMENT | |
| LOW | tests/js/components/logpanel.test.js | 1381 | expect(getFilterCount('info')).toBe(1); | COMMENT |
| 461 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 | 91 | # 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/vector_stores/test_full_migration_lifecycle.py | 227 | # Step 1: a REALISTIC LEGACY index directly at the SHARED (NOT | COMMENT |
| LOW⚡ | tests/vector_stores/test_full_migration_lifecycle.py | 310 | # Step 3: trigger the per-user relocation. In production this is | COMMENT |
| LOW⚡ | tests/vector_stores/test_full_migration_lifecycle.py | 391 | # Step 4: SEARCH through the real VectorIndex facade (via the | COMMENT |
| LOW⚡ | tests/vector_stores/test_full_migration_lifecycle.py | 402 | # Step 5: a NEW document indexed normally MERGES into the relocated + | COMMENT |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4560 | # Step 1: Migrate to 0001 only | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4564 | # Step 2: Insert data | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4591 | # Step 3: Upgrade to head (0005) | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4595 | # Step 4: Verify data survived | STRING |
| LOW | tests/database/test_alembic_migrations.py | 4608 | # Step 5: Verify new columns exist | STRING |
| LOW | tests/database/test_alembic_migrations.py | 4640 | # 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 | 404 | # Step 1: Delete chunks (no FK, manual cleanup) | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 409 | # Step 2: Delete RAG index | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 414 | # 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 | …arch_library/services/test_index_documents_parallel.py | 825 | # Step 1: pre-create wrapper A and put it in the dict as canonical. | COMMENT |
| LOW⚡ | …rch_library/services/test_multi_model_switch_revert.py | 202 | # Step 1: index under model A. | COMMENT |
| LOW⚡ | …rch_library/services/test_multi_model_switch_revert.py | 250 | # Step 2: switch to model B, force-reindex the SAME document/collection. | COMMENT |
| LOW⚡ | …rch_library/services/test_multi_model_switch_revert.py | 356 | # Step 4: revert for real via the WRITE-path resolution | 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 |
| 98 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/vector_stores/test_full_migration_lifecycle.py | 227 | # Step 1: a REALISTIC LEGACY index directly at the SHARED (NOT | COMMENT |
| LOW⚡ | tests/vector_stores/test_full_migration_lifecycle.py | 310 | # Step 3: trigger the per-user relocation. In production this is | COMMENT |
| LOW⚡ | tests/vector_stores/test_full_migration_lifecycle.py | 391 | # Step 4: SEARCH through the real VectorIndex facade (via the | COMMENT |
| LOW⚡ | tests/vector_stores/test_full_migration_lifecycle.py | 402 | # Step 5: a NEW document indexed normally MERGES into the relocated + | COMMENT |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4560 | # Step 1: Migrate to 0001 only | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4564 | # Step 2: Insert data | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4591 | # Step 3: Upgrade to head (0005) | STRING |
| LOW⚡ | tests/database/test_alembic_migrations.py | 4595 | # Step 4: Verify data survived | STRING |
| LOW | tests/database/test_alembic_migrations.py | 4608 | # Step 5: Verify new columns exist | STRING |
| LOW | tests/database/test_alembic_migrations.py | 4640 | # 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 | 404 | # Step 1: Delete chunks (no FK, manual cleanup) | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 409 | # Step 2: Delete RAG index | COMMENT |
| LOW⚡ | tests/deletion/test_cascade_integration.py | 414 | # 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 | …arch_library/services/test_index_documents_parallel.py | 825 | # Step 1: pre-create wrapper A and put it in the dict as canonical. | COMMENT |
| LOW⚡ | …rch_library/services/test_multi_model_switch_revert.py | 202 | # Step 1: index under model A. | COMMENT |
| LOW⚡ | …rch_library/services/test_multi_model_switch_revert.py | 250 | # Step 2: switch to model B, force-reindex the SAME document/collection. | COMMENT |
| LOW⚡ | …rch_library/services/test_multi_model_switch_revert.py | 356 | # Step 4: revert for real via the WRITE-path resolution | 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 |
| 77 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 | 270 | const deleteCall = window.api.fetchWithErrorHandling.mock.calls.find( | CODE |
| CRITICAL | tests/js/pages/note-detail-accept-link.test.js | 177 | const infoCalls = window.ui.showMessage.mock.calls.filter(c => c[1] === 'info'); | 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 | 193 | db.query.return_value.filter_by.return_value.update.assert_called_once() | CODE |
| CRITICAL | …_library/services/test_library_rag_service_rollback.py | 180 | session.query.return_value.filter_by.return_value.delete.assert_called_once() | CODE |
| CRITICAL | tests/web/auth/test_cleanup_middleware.py | 373 | 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/vector_stores/test_legacy_rekey_quarantine.py | 48 | # Route session.query(Model) by class name so the test is robust to import | 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 | 459 | # 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 | 2557 | # Create comprehensive mock for SettingsManager | COMMENT |
| MEDIUM | …rch_library/services/test_download_service_3827_fix.py | 638 | # Route session.query(...) by model so the call order is robust to the | COMMENT |
| MEDIUM | …arch_library/services/test_index_finalize_self_heal.py | 132 | # needs real key material; stub it (as the canonical harness does) so | 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 |
| MEDIUM | tests/notes/test_note_stress.py | 955 | # in this test harness; force the capture to None so update_note | COMMENT |
| MEDIUM | tests/notes/test_notes_routes_review_fixes.py | 64 | # common attribute names so this is robust to library upgrades. | 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 | 152 | # 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 | 38 | 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 | 1097 | # Section-level prompt - more comprehensive | COMMENT |
| MEDIUM | src/local_deep_research/search_system.py | 78 | strategy_name: str = "source-based", # Default to comprehensive research strategy | CODE |
| MEDIUM | …ced_search_system/filters/journal_reputation_filter.py | 94 | # controls — the comprehensive pattern audited in log_sanitizer, | COMMENT |
| MEDIUM | …earch_system/strategies/topic_organization_strategy.py | 1717 | # Part 2: Generate comprehensive summary based on the topic sections | COMMENT |
| MEDIUM | …em/strategies/followup/enhanced_contextual_followup.py | 72 | # 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 |
| 27 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .gitleaks.toml | 228 | '''your-api-key-here''', | STRING |
| HIGH⚡ | docker-compose.yml | 95 | # - LDR_LLM_OPENAI_API_KEY=<your-api-key> # Lock OpenAI API key | COMMENT |
| HIGH⚡ | docker-compose.yml | 96 | # - LDR_LLM_ANTHROPIC_API_KEY=<your-api-key> # Lock Anthropic API key | COMMENT |
| HIGH⚡ | docker-compose.yml | 106 | # - LDR_LLM_OPENAI_ENDPOINT_API_KEY=<your-api-key> | COMMENT |
| HIGH⚡ | docker-compose.yml | 115 | # - 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 | 384 | export LDR_LLM_OPENAI_ENDPOINT_API_KEY="<your-api-key>" | CODE |
| HIGH | docs/faq.md | 395 | - 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 | 142 | export LDR_LLM_OPENAI_ENDPOINT_API_KEY="<your-api-key>" | CODE |
| HIGH | docs/env_configuration.md | 156 | - LDR_LLM_OPENAI_ENDPOINT_API_KEY=<your-api-key> | CODE |
| HIGH | docs/env_configuration.md | 172 | export LDR_LLM_OPENAI_ENDPOINT_API_KEY="<your-api-key>" | CODE |
| HIGH | docs/env_configuration.md | 182 | -e LDR_LLM_OPENAI_API_KEY=your-api-key-here \ | CODE |
| HIGH | docs/env_configuration.md | 220 | export LDR_LLM_ANTHROPIC_API_KEY=your-api-key-here | CODE |
| HIGH | docs/env_configuration.md | 223 | 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 | src/local_deep_research/api/research_functions.py | 216 | api_key="your-api-key-here" | 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 |
|---|---|---|---|---|
| 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 | 1598 | # {"agent_enabled": null} → stored True (available), serialized True. | COMMENT |
| HIGH | tests/web/test_save_research_sources_hostile_values.py | 348 | """``{"name": null}`` is the ordinary JSON shape for a missing author | STRING |
| 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 | 721 | ctx.push() | CODE |
| HIGH | tests/notes/test_note_ai_service.py | 266 | '{"added": null, "removed": "a paragraph about X", ' | CODE |
| HIGH | tests/notes/test_note_ai_service.py | 267 | '"modified": ["real change", null], "summary": null}' | CODE |
| HIGH | tests/notes/test_note_ai_service.py | 865 | '{"entities": null, "concepts": "not a list", ' | CODE |
| HIGH | tests/notes/test_note_ai_service.py | 1171 | '["real claim", 123, null, " ", {"x": 1}, "second claim"]' | CODE |
| HIGH | tests/notes/test_note_ai_service.py | 1159 | ``isinstance(c, str) and c.strip()`` — non-string items (int, null, | STRING |
| HIGH | tests/notes/test_note_ai_service.py | 2275 | (id: null) — it must be skipped, not returned.""" | STRING |
| HIGH | tests/news/test_library_sweep.py | 889 | 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/settings/manager.py | 208 | # A shipped optional default may legitimately be null; the equality | COMMENT |
| 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 |
| HIGH | …search/research_library/downloaders/playwright_html.py | 54 | if (window.navigator && window.navigator.serviceWorker) { | CODE |
| HIGH | …search/research_library/downloaders/playwright_html.py | 61 | get() { return undefined; }, | CODE |
| HIGH | …rch/research_library/notes/services/note_ai_service.py | 1352 | # drops a section (null). | COMMENT |
| HIGH | …rch/research_library/notes/services/note_ai_service.py | 201 | the key is present-but-null, not the default) or a bare string for a key | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/web/queue/test_queued_research_lifecycle_races.py | 40 | def set_session() -> None: | CODE |
| LOW | src/local_deep_research/__init__.py | 15 | __all__ = [ | CODE |
| LOW | src/local_deep_research/vector_stores/__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 | 385 | __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 | 1441 | 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 | 220 | def set_sqlcipher_key_from_hex(cursor_or_conn: Any, hex_key: str) -> None: | CODE |
| LOW | src/local_deep_research/database/models/__init__.py | 114 | __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 | 646 | __all__ = ["FETCH_MODES", "build_fetch_tool", "make_library_resolver"] | 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 | …earch_system/strategies/topic_organization_strategy.py | 155 | def set_progress_callback(self, callback) -> None: | 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 | 73 | __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 | 42 | __all__ = [ | CODE |
| LOW | …ocal_deep_research/security/file_integrity/__init__.py | 37 | __all__ = [ | CODE |
| LOW | …_research/security/file_integrity/integrity_manager.py | 358 | 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 | 360 | 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 | …local_deep_research/research_library/notes/__init__.py | 18 | __all__ = ["NoteService", "NoteAIService"] | CODE |
| LOW | …p_research/research_library/notes/services/__init__.py | 16 | __all__ = ["NoteService", "NoteAIService", "get_note_source_type_id"] | 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 |
| 43 more matches not shown… | ||||
| 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 | 3276 | "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 | 293 | 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/strategies/test_langgraph_agent_strategy.py | 5776 | shared = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * 8 | CODE |
| LOW⚡ | tests/strategies/test_langgraph_agent_strategy.py | 5776 | shared = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * 8 | 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⚡ | …sts/ui_tests/playwright/tests/notes/notes-list.spec.js | 60 | await expect(list.searchInput).toHaveAttribute('placeholder', /AI Hybrid/); | CODE |
| LOW⚡ | …sts/ui_tests/playwright/tests/notes/notes-list.spec.js | 64 | await expect(list.searchInput).toHaveAttribute('placeholder', /keyword/i); | CODE |
| LOW⚡ | …sts/ui_tests/playwright/tests/notes/notes-list.spec.js | 69 | await expect(list.searchInput).toHaveAttribute('placeholder', /meaning/i); | CODE |
| LOW | …sts/ui_tests/playwright/tests/notes/notes-a11y.spec.js | 143 | const placeholder = await detail.addTagInput.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/notes/test_note_service.py | 4789 | db_session, st, "My Self Note", "placeholder", "self-ref-src" | 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 | 108 | # 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 |
| 24 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/vector_stores/test_faiss_store.py | 31 | CODE | |
| 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 | 25 | 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 | 74 | CODE | |
| LOW | …search_system/strategies/focused_iteration_strategy.py | 59 | CODE | |
| LOW | …earch_system/strategies/topic_organization_strategy.py | 29 | CODE | |
| LOW | …nced_search_system/strategies/source_based_strategy.py | 65 | CODE | |
| LOW | …d_search_system/strategies/langgraph_agent_strategy.py | 1427 | CODE | |
| LOW | src/local_deep_research/config/llm_config.py | 54 | CODE | |
| LOW | …earch/research_library/services/library_rag_service.py | 277 | CODE | |
| LOW | …_research/research_library/services/library_service.py | 264 | CODE | |
| LOW | src/local_deep_research/news/api.py | 1048 | 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 | 167 | CODE | |
| LOW | src/local_deep_research/api/research_functions.py | 345 | CODE | |
| LOW | …p_research/web_search_engines/search_engine_factory.py | 662 | CODE | |
| LOW | …deep_research/web_search_engines/search_engine_base.py | 313 | CODE | |
| LOW | …web_search_engines/engines/search_engine_google_pse.py | 25 | 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 | 26 | CODE | |
| LOW | …rch/web_search_engines/engines/search_engine_tavily.py | 31 | 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 | 155 | CODE | |
| LOW | …h/web_search_engines/engines/search_engine_guardian.py | 21 | CODE | |
| LOW | …arch/web_search_engines/engines/search_engine_brave.py | 29 | 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 | |
| 3 more matches not shown… | ||||
| 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 | 1223 | CODE | |
| MEDIUM | …search_library/routes/test_rag_routes_deep_coverage.py | 1250 | CODE | |
| MEDIUM | …search_library/routes/test_rag_routes_deep_coverage.py | 1275 | 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 | 345 | 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 | 720 | # 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 | 2788 | * @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 | tests/ui_tests/run_legacy_pkl_migration.sh | 17 | # 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 | 360 | # 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 |