AI conversations that actually remember. Never re-explain your project to your AI again. Join our Discord: https://discord.gg/tyvKNccgqN
This report presents the forensic synthetic code analysis of basicmachines-co/basic-memory, a Python project with 3,425 GitHub stars. SynthScan v2.0 examined 271,112 lines of code across 1031 source files, recording 6762 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 29.5 places this repository in the Moderate 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 6762 distinct pattern matches across 22 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⚡ | tests/test_coerce.py | 15 | def test_native_list_passthrough(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 21 | def test_single_string_wrapped(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 24 | def test_non_json_string_wrapped(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 27 | def test_json_object_string_wrapped(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 39 | def test_none_parses_to_empty_list(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 45 | def test_list_with_comma_element_splits(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 48 | def test_plain_list_passthrough(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 54 | def test_int_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 58 | def test_dict_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 62 | def test_int_list_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 67 | def test_dict_list_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 71 | def test_mixed_list_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 76 | def test_json_array_string_with_int_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 81 | def test_json_array_string_with_dict_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 85 | def test_json_array_string_mixed_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 90 | def test_json_array_string_all_strings_still_parses(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 100 | def test_native_dict_passthrough(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 106 | def test_non_json_string_passthrough(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 110 | def test_json_array_string_passthrough(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 123 | def test_none_returns_empty_list(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 128 | def test_single_string_wraps_as_one_element(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 135 | def test_comma_string_with_spaces_strips(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 143 | def test_json_array_string_single_element(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 146 | def test_json_array_string_with_comma_elements(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 152 | def test_plain_list_passthrough(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 155 | def test_list_with_comma_element_splits(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 159 | def test_list_with_multiple_comma_elements(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 164 | def test_hash_prefix_preserved(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 168 | def test_hash_prefix_in_comma_string_preserved(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 173 | def test_int_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 176 | def test_dict_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 182 | def test_int_list_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 187 | def test_mixed_list_passthrough_for_pydantic_rejection(self): | CODE |
| LOW⚡ | tests/test_coerce.py | 192 | def test_dict_list_passthrough_for_pydantic_rejection(self): | CODE |
| LOW | tests/conftest.py | 98 | def _configured_postgres_sync_url() -> str | None: | CODE |
| LOW | tests/conftest.py | 139 | def _resolve_postgres_sync_url(postgres_container) -> str: | CODE |
| LOW | tests/conftest.py | 148 | async def _reset_postgres_test_schema(engine: AsyncEngine, async_url: str) -> None: | CODE |
| LOW | tests/conftest.py | 215 | def suppress_logfire_no_config_warning(monkeypatch) -> None: | CODE |
| LOW | tests/conftest.py | 242 | async def cleanup_global_db_after_test() -> AsyncGenerator[None, None]: | CODE |
| LOW | tests/test_runtime_storage_project_resolution.py | 24 | def test_storage_project_prefix_from_project_path_strips_legacy_mount_prefix() -> None: | CODE |
| LOW | tests/test_runtime_storage_project_resolution.py | 30 | def test_storage_object_key_from_project_prefix_joins_project_relative_path() -> None: | CODE |
| LOW | tests/test_runtime_storage_project_resolution.py | 42 | def test_storage_object_key_from_project_path_strips_legacy_project_mount() -> None: | CODE |
| LOW | tests/test_runtime_storage_project_resolution.py | 48 | def test_storage_project_prefix_resolution_prefers_exact_active_path() -> None: | CODE |
| LOW | tests/test_runtime_storage_project_resolution.py | 66 | def test_storage_project_prefix_resolution_uses_name_then_unique_path_suffix() -> None: | CODE |
| LOW | tests/test_runtime_storage_project_resolution.py | 90 | def test_storage_project_prefix_resolution_reports_ambiguous_suffix_matches() -> None: | CODE |
| LOW | tests/test_runtime_storage_project_resolution.py | 107 | def test_storage_project_prefix_resolution_reports_missing_project() -> None: | CODE |
| LOW | tests/test_pr_title_workflow.py | 6 | def _semantic_pr_action_inputs() -> dict: | CODE |
| LOW | tests/test_pr_title_workflow.py | 15 | def test_pr_title_workflow_allows_ci_scope() -> None: | CODE |
| LOW | tests/test_deps.py | 34 | async def project_with_special_chars( | CODE |
| LOW | tests/test_deps.py | 52 | async def test_get_project_config_with_spaces( | CODE |
| LOW | tests/test_deps.py | 75 | async def test_get_project_config_with_permalink( | CODE |
| LOW | tests/test_deps.py | 92 | async def test_get_project_config_with_special_chars( | CODE |
| LOW | tests/test_deps.py | 114 | async def test_get_project_config_not_found(project_repository: ProjectRepository, session_maker): | CODE |
| LOW | tests/test_deps.py | 128 | async def test_get_project_id_with_spaces( | CODE |
| LOW | tests/test_deps.py | 144 | async def test_get_project_id_with_permalink( | CODE |
| LOW | tests/test_deps.py | 160 | async def test_get_project_id_with_special_chars( | CODE |
| LOW | tests/test_deps.py | 176 | async def test_get_project_id_not_found(project_repository: ProjectRepository, session_maker): | CODE |
| LOW | tests/test_deps.py | 190 | async def test_get_project_id_fallback_to_name( | CODE |
| LOW | tests/test_deps.py | 211 | async def test_get_project_config_case_sensitivity( | CODE |
| LOW | tests/test_deps.py | 247 | async def test_validate_project_id_success( | CODE |
| 4750 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/conftest.py | 316 | # Create a new ConfigManager that uses the test home directory | COMMENT |
| MEDIUM | tests/test_config.py | 542 | # Create a test ConfigManager instance | COMMENT |
| MEDIUM | tests/test_config.py | 1018 | # Create a project path | COMMENT |
| MEDIUM | tests/repository/test_search_repository.py | 496 | # Create a search index row with project_id | COMMENT |
| MEDIUM | tests/repository/test_observation_repository.py | 372 | # Create a test observation | COMMENT |
| MEDIUM⚡ | tests/repository/test_project_info_repository.py | 14 | # Create a ProjectInfoRepository | COMMENT |
| MEDIUM⚡ | tests/repository/test_project_info_repository.py | 26 | # Create a ProjectInfoRepository | COMMENT |
| MEDIUM | tests/repository/test_project_repository.py | 241 | # Create a non-default project | COMMENT |
| MEDIUM | tests/repository/test_entity_repository_upsert.py | 217 | # Create an entity first | COMMENT |
| MEDIUM | tests/repository/test_search_repository_edit_bug_fix.py | 52 | # Create a separate in-memory database for this test | COMMENT |
| MEDIUM | tests/repository/test_search_repository_edit_bug_fix.py | 56 | # Create the database schema | COMMENT |
| MEDIUM⚡ | tests/repository/test_search_repository_edit_bug_fix.py | 191 | # Create a separate in-memory database for this test | COMMENT |
| MEDIUM⚡ | tests/repository/test_search_repository_edit_bug_fix.py | 195 | # Create the database schema | COMMENT |
| MEDIUM | tests/repository/test_entity_repository.py | 200 | # Create a target entity and relation | COMMENT |
| MEDIUM | tests/repository/test_entity_repository.py | 938 | # Create a second project | COMMENT |
| MEDIUM | tests/repository/test_entity_repository.py | 1004 | # Create a second project with same permalink | COMMENT |
| MEDIUM | tests/importers/test_importer_base.py | 13 | # Create a concrete implementation of the abstract class for testing | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 17 | # Create a file with malformed YAML frontmatter | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 53 | # Create a file with completely broken YAML | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 88 | # Create a file without note_type in frontmatter | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 115 | # Create a file with empty frontmatter | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 141 | # Create a file with no frontmatter at all | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 165 | # Create a file with null/None note_type | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 191 | # Create a file with null title | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 217 | # Create a file with empty title | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 243 | # Create a file with string "None" as title (common in templates) | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 269 | # Create a valid file | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 309 | # Create a file with completely broken YAML that will trigger the fallback path | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser_error_handling.py | 351 | # Create a file with user's custom frontmatter (like the bug report) | COMMENT |
| MEDIUM | tests/markdown/test_entity_parser.py | 237 | # Create a test file in the project directory | STRING |
| MEDIUM | tests/utils/test_validate_project_path.py | 275 | # Create a very long but legitimate path | COMMENT |
| MEDIUM | tests/utils/test_validate_project_path.py | 343 | # Create a directory outside the project | COMMENT |
| MEDIUM⚡ | tests/utils/test_validate_project_path.py | 443 | # Create a more complex directory structure | COMMENT |
| MEDIUM⚡ | tests/utils/test_validate_project_path.py | 452 | # Create a sensitive file in the sibling directory | COMMENT |
| MEDIUM | tests/utils/test_utf8_handling.py | 16 | # Create a test file with various UTF-8 characters | COMMENT |
| MEDIUM | tests/utils/test_utf8_handling.py | 65 | # Create a test file with frontmatter containing UTF-8 | COMMENT |
| MEDIUM | tests/utils/test_utf8_handling.py | 120 | # Create a test file with UTF-8 characters | COMMENT |
| MEDIUM | tests/mcp/test_tool_canvas.py | 251 | # Create a test file that we're referencing | COMMENT |
| MEDIUM | tests/mcp/test_tool_schema.py | 272 | # Create a person note but no schema note | COMMENT |
| MEDIUM | tests/mcp/test_tool_schema.py | 326 | # Create a person with an extra "hobby" field not in the schema | COMMENT |
| MEDIUM | tests/mcp/test_obsidian_yaml_formatting.py | 11 | # Create a note with tags using write_note | COMMENT |
| MEDIUM | tests/mcp/test_tool_resource.py | 137 | # Create a text file via notes | COMMENT |
| MEDIUM | tests/mcp/test_tool_resource.py | 173 | # Create a test image | COMMENT |
| MEDIUM | tests/mcp/test_tool_delete_note.py | 130 | # Create a note to delete | COMMENT |
| MEDIUM | tests/mcp/test_tool_search.py | 25 | # Create a test note | COMMENT |
| MEDIUM | tests/mcp/test_tool_search.py | 59 | # Create a test note | COMMENT |
| MEDIUM | tests/mcp/test_tool_search.py | 90 | # Create a test note | COMMENT |
| MEDIUM | tests/mcp/test_tool_search.py | 124 | # Create a test note | COMMENT |
| MEDIUM | tests/mcp/test_tool_search.py | 286 | # Create a test note | COMMENT |
| MEDIUM | tests/mcp/test_prompts.py | 93 | # Create a mock context with a file that has no permalink (like a binary file) | COMMENT |
| MEDIUM | tests/mcp/test_tool_view_note.py | 195 | # Create a note with no clear title structure | COMMENT |
| MEDIUM | tests/mcp/test_tool_edit_note.py | 307 | # Create the note first | COMMENT |
| MEDIUM | tests/mcp/test_tool_edit_note.py | 332 | # Create a note first | COMMENT |
| MEDIUM | tests/mcp/test_tool_edit_note.py | 354 | # Create a note first | COMMENT |
| MEDIUM | tests/mcp/test_tool_edit_note.py | 376 | # Create a note first | COMMENT |
| MEDIUM | tests/mcp/test_tool_edit_note.py | 451 | # Create a note | COMMENT |
| MEDIUM | tests/mcp/test_tool_edit_note.py | 845 | # Create a note first | COMMENT |
| MEDIUM | tests/mcp/test_tool_move_note.py | 610 | # Create a note to test different identifier formats | COMMENT |
| MEDIUM | tests/mcp/test_tool_write_note.py | 268 | # Create a note with custom permalink in frontmatter | COMMENT |
| MEDIUM | tests/mcp/test_tool_write_note.py | 1163 | # Create a note with all features to ensure security validation doesn't interfere | COMMENT |
| 127 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/basic_memory/utils.py | 20 | Normalize project path by stripping mount point prefix. In cloud deployments, the S3 bucket is mounted at /app/data | STRING |
| HIGH | src/basic_memory/utils.py | 76 | Generate a stable permalink from a file path. Args: file_path: Original file path (str, Path, or PathLike) | STRING |
| HIGH | src/basic_memory/file_utils.py | 56 | Compute SHA-256 checksum of content. Args: content: Content to hash (either text string or bytes) | STRING |
| HIGH | src/basic_memory/file_utils.py | 394 | Parse YAML frontmatter from content. Args: content: Content with YAML frontmatter Returns: | STRING |
| HIGH | src/basic_memory/file_utils.py | 435 | Remove YAML frontmatter from content. Args: content: Content with frontmatter Returns: Co | STRING |
| HIGH | …/basic_memory/repository/postgres_search_repository.py | 189 | Convert Boolean query to tsquery format. Args: query: A Boolean query like "coffee AND brewing" or | STRING |
| HIGH | src/basic_memory/markdown/markdown_processor.py | 65 | Write EntityMarkdown schema back to file. This is step 3 of our read->modify->write pattern. The entire | STRING |
| HIGH | src/basic_memory/markdown/utils.py | 23 | Convert markdown entity to model. Does not include relations. Args: file_path: Path to the markdown fi | STRING |
| HIGH | src/basic_memory/mcp/project_context.py | 1192 | Get and validate project, setting it in context if available. Args: client: HTTP client for API calls | STRING |
| HIGH | src/basic_memory/mcp/project_context.py | 1543 | Resolve project, create correctly-routed client, and validate project. Solves the bootstrap problem: we need to kno | STRING |
| HIGH | src/basic_memory/mcp/clients/memory.py | 53 | Build context from a memory path. Args: path: The path to build context for (without memory:// pref | STRING |
| HIGH | src/basic_memory/mcp/clients/memory.py | 106 | Get recent activity. Args: timeframe: Time filter (e.g., "7d", "1 week", "2 days ago") | STRING |
| HIGH | src/basic_memory/mcp/clients/resource.py | 43 | Read a resource by entity ID. Args: entity_id: Entity external_id (UUID) Returns: | STRING |
| HIGH | src/basic_memory/mcp/clients/search.py | 50 | Search across all content in the knowledge base. Args: query: Search query dict (from SearchQuery.m | STRING |
| HIGH | src/basic_memory/mcp/clients/directory.py | 47 | List directory contents. Args: dir_name: Directory path to list (default: root) depth: | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 52 | Create a new entity. Args: entity_data: Entity data including title, content, folder, etc. | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 85 | Update an existing entity (full replacement). Args: entity_id: Entity external_id (UUID) | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 115 | Get an entity by ID. Args: entity_id: Entity external_id (UUID) Returns: Entit | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 147 | Partially update an entity. Args: entity_id: Entity external_id (UUID) patch_data: Part | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 177 | Delete an entity. Args: entity_id: Entity external_id (UUID) Returns: DeleteEn | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 205 | Move an entity to a new location. Args: entity_id: Entity external_id (UUID) destinatio | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 237 | Move all entities in a directory to a new location. Args: source_directory: Source directory path ( | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 270 | Delete all entities in a directory. Args: directory: Directory path to delete (relative to project | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 301 | Index a markdown file that exists on disk but is not indexed yet. Args: file_path: Markdown file pa | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 352 | Resolve a string identifier to an entity external_id. Args: identifier: The identifier to resolve ( | STRING |
| HIGH | src/basic_memory/mcp/clients/project.py | 61 | Create a new project. Args: project_data: Project creation data (name, path, set_default) | STRING |
| HIGH | src/basic_memory/mcp/clients/project.py | 84 | Delete a project by its external ID. Args: project_external_id: Project external ID (UUID) | STRING |
| HIGH | src/basic_memory/mcp/clients/project.py | 108 | Resolve a project name/permalink to its full project record. Args: identifier: Project name or perm | STRING |
| HIGH | src/basic_memory/mcp/clients/project.py | 129 | Set a project as the default. Args: project_external_id: Project external ID (UUID) Return | STRING |
| HIGH | src/basic_memory/mcp/clients/project.py | 151 | Update a project's configuration (e.g. path). Args: project_external_id: Project external ID (UUID) | STRING |
| HIGH | src/basic_memory/mcp/clients/project.py | 178 | Trigger a project indexing operation. Args: project_external_id: Project external ID (UUID) | STRING |
| HIGH | src/basic_memory/mcp/clients/project.py | 206 | Get the current project-index observation for a project. Args: project_external_id: Project externa | STRING |
| HIGH | src/basic_memory/mcp/clients/project.py | 226 | Get detailed project information and statistics. Args: project_external_id: Project external ID (UU | STRING |
| HIGH | src/basic_memory/mcp/clients/schema.py | 49 | Validate notes against their resolved schemas. Args: note_type: Optional note type to batch-validat | STRING |
| HIGH | src/basic_memory/mcp/clients/schema.py | 82 | Infer a schema from existing notes of a given type. Args: note_type: The note type to analyze | STRING |
| HIGH | src/basic_memory/mcp/clients/schema.py | 104 | Show drift between schema definition and actual usage. Args: note_type: The note type to check for | STRING |
| HIGH | src/basic_memory/mcp/tools/read_content.py | 180 | Read a file's raw content by path or permalink. This tool provides direct access to file content in the knowledge b | STRING |
| HIGH | src/basic_memory/mcp/tools/view_note.py | 30 | View a markdown note as a formatted artifact. This tool reads a note using the same logic as read_note but instruct | STRING |
| HIGH | src/basic_memory/mcp/tools/edit_note.py | 363 | Edit an existing markdown note in the knowledge base. Makes targeted changes to existing notes without rewriting th | STRING |
| HIGH | src/basic_memory/mcp/tools/delete_note.py | 206 | Delete a note or directory from the knowledge base. Permanently removes a note or directory from the specified proj | STRING |
| HIGH | src/basic_memory/mcp/tools/utils.py | 206 | Make a GET request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use url: | STRING |
| HIGH | src/basic_memory/mcp/tools/utils.py | 302 | Make a PUT request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use url: | STRING |
| HIGH | src/basic_memory/mcp/tools/utils.py | 407 | Make a PATCH request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use ur | STRING |
| HIGH | src/basic_memory/mcp/tools/utils.py | 516 | Make a POST request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use url | STRING |
| HIGH | src/basic_memory/mcp/tools/utils.py | 603 | Resolve a string identifier to an entity external_id using the v2 API. Args: client: HTTP client for API ca | STRING |
| HIGH | src/basic_memory/mcp/tools/utils.py | 649 | Make a DELETE request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use u | STRING |
| HIGH | src/basic_memory/mcp/tools/write_note.py | 87 | Write a markdown note to the knowledge base. Creates a markdown note with semantic observations and relations. | STRING |
| HIGH | src/basic_memory/mcp/tools/search.py | 718 | Search across all content in the knowledge base with comprehensive syntax support. This tool searches the knowledge | STRING |
| HIGH | src/basic_memory/mcp/tools/read_note.py | 112 | Return the raw markdown for a note, or guidance text if no match is found. Finds and retrieves a note by its title, | STRING |
| HIGH | src/basic_memory/mcp/tools/recent_activity.py | 76 | Get recent activity for a specific project or across all projects. Project Resolution: The server resolves proj | STRING |
| HIGH | src/basic_memory/mcp/tools/move_note.py | 398 | Move a note or directory to a new location within the same project. Moves a note or directory from one location to | STRING |
| HIGH | src/basic_memory/mcp/tools/build_context.py | 181 | Get context needed to continue a discussion within a specific project. This tool enables natural continuation of di | STRING |
| HIGH | src/basic_memory/mcp/tools/canvas.py | 44 | Create an Obsidian canvas file with the provided nodes and edges. This tool creates a .canvas file compatible with | STRING |
| HIGH | src/basic_memory/mcp/tools/list_directory.py | 45 | List directory contents from the knowledge base with optional filtering. This tool provides 'ls' functionality for | STRING |
| HIGH | src/basic_memory/mcp/tools/schema.py | 225 | Validate notes against their resolved schema. Validates a specific note (by identifier) or all notes of a given typ | STRING |
| HIGH | src/basic_memory/mcp/tools/schema.py | 345 | Analyze existing notes and suggest a schema definition. Examines observation categories and relation types across a | STRING |
| HIGH | src/basic_memory/mcp/tools/schema.py | 472 | Detect drift between a schema definition and actual note usage. Compares the existing schema for a note type agains | STRING |
| HIGH | src/basic_memory/mcp/resources/project_info.py | 22 | Get comprehensive information about the current Basic Memory project. This tool provides detailed statistics and st | STRING |
| HIGH | src/basic_memory/cli/commands/cloud/cloud_utils.py | 135 | Check if a project exists on cloud. Args: project_name: Name of project to check workspace: Optiona | STRING |
| HIGH | src/basic_memory/cli/commands/cloud/rclone_commands.py | 291 | One-way sync: local → cloud. Makes cloud identical to local using rclone sync. Args: project: Project | STRING |
| 48 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_rclone_commands.py | 3 | CODE | |
| LOW | tests/test_update_versions.py | 1 | CODE | |
| LOW | tests/test_telemetry.py | 3 | CODE | |
| LOW | …sts/repository/test_sqlite_vector_search_repository.py | 110 | CODE | |
| LOW | tests/runtime/test_note_move_destination.py | 1 | CODE | |
| LOW | tests/runtime/test_note_content_read_planning.py | 1 | CODE | |
| LOW | tests/runtime/test_accepted_note_write_guards.py | 1 | CODE | |
| LOW | tests/runtime/test_pending_note_materialization.py | 1 | CODE | |
| LOW | tests/runtime/test_deleted_note_file_checksum.py | 1 | CODE | |
| LOW | tests/runtime/test_deleted_note_response.py | 1 | CODE | |
| LOW | tests/mcp/test_client_info.py | 3 | CODE | |
| LOW | tests/mcp/test_project_context.py | 7 | CODE | |
| LOW | tests/mcp/test_project_context_telemetry.py | 3 | CODE | |
| LOW | tests/mcp/test_tool_telemetry.py | 3 | CODE | |
| LOW | tests/mcp/test_server_telemetry.py | 3 | CODE | |
| LOW | tests/mcp/test_client_telemetry.py | 3 | CODE | |
| LOW | tests/mcp/test_async_client_telemetry.py | 3 | CODE | |
| LOW | tests/mcp/test_tool_read_content.py | 7 | CODE | |
| LOW | tests/mcp/test_tool_json_output_modes.py | 3 | CODE | |
| LOW | tests/cli/test_workspace_stub.py | 13 | CODE | |
| LOW | tests/cli/test_workspace_commands.py | 15 | CODE | |
| LOW | tests/cli/test_project_set_cloud_local.py | 11 | CODE | |
| LOW | tests/cli/test_db_reset_zombie_check.py | 3 | CODE | |
| LOW | tests/cli/test_auto_update.py | 3 | CODE | |
| LOW | tests/cli/test_cloud_status.py | 3 | CODE | |
| LOW | tests/cli/test_cli_telemetry.py | 3 | CODE | |
| LOW | tests/cli/test_cloud_authentication.py | 3 | CODE | |
| LOW | tests/cli/test_import_chatgpt.py | 9 | CODE | |
| LOW | tests/cli/test_import_claude_conversations.py | 9 | CODE | |
| LOW | tests/cli/test_import_claude_projects.py | 9 | CODE | |
| LOW | tests/cli/test_orphans_command.py | 13 | CODE | |
| LOW | tests/cloud/test_note_content_read_service.py | 1 | CODE | |
| LOW | tests/cloud/test_project_deletes.py | 1 | CODE | |
| LOW | tests/cloud/test_cloud_services.py | 1 | CODE | |
| LOW | tests/cloud/test_note_content_materialization.py | 3 | CODE | |
| LOW | tests/api/v2/test_memory_hydration.py | 7 | CODE | |
| LOW | tests/api/v2/test_knowledge_router_telemetry.py | 3 | CODE | |
| LOW | tests/api/v2/test_search_hydration.py | 7 | CODE | |
| LOW | tests/api/v2/test_utils_telemetry.py | 3 | CODE | |
| LOW | tests/api/v2/test_search_router_telemetry.py | 3 | CODE | |
| LOW | tests/index/test_local_project_index.py | 3 | CODE | |
| LOW | tests/index/test_watch_service.py | 3 | CODE | |
| LOW | tests/index/test_watch_coordinator.py | 3 | CODE | |
| LOW | tests/index/test_local_reconcile_file_reader.py | 3 | CODE | |
| LOW | tests/indexing/test_vector_sync_planning.py | 3 | CODE | |
| LOW | tests/indexing/test_orphan_cleanup.py | 3 | CODE | |
| LOW | …sts/indexing/test_note_content_batch_reconciliation.py | 3 | CODE | |
| LOW | tests/indexing/test_note_content_read_repair_runner.py | 3 | CODE | |
| LOW | tests/indexing/test_note_content_reconciler.py | 3 | CODE | |
| LOW | tests/indexing/test_batch_indexer.py | 3 | CODE | |
| LOW | tests/indexing/test_batch_index_search_writer.py | 3 | CODE | |
| LOW | tests/indexing/test_accepted_note_write_runner.py | 3 | CODE | |
| LOW | tests/indexing/test_file_indexer.py | 3 | CODE | |
| LOW | tests/indexing/test_project_index_runtime.py | 3 | CODE | |
| LOW | tests/indexing/test_accepted_note_mutation_runner.py | 3 | CODE | |
| LOW | tests/indexing/test_index_batch_runtime.py | 3 | CODE | |
| LOW | tests/services/test_search_service_telemetry.py | 3 | CODE | |
| LOW | tests/services/test_initialization.py | 7 | CODE | |
| LOW | tests/services/test_entity_service_telemetry.py | 3 | CODE | |
| LOW | tests/services/test_entity_service_prepare.py | 3 | CODE | |
| 551 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/conftest.py | 55 | # ============================================================================= | COMMENT |
| MEDIUM | tests/conftest.py | 57 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/repository/test_relation_repository.py | 406 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/repository/test_relation_repository.py | 408 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/repository/test_entity_repository.py | 966 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/repository/test_entity_repository.py | 968 | # ------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/utils/test_file_utils.py | 285 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/utils/test_file_utils.py | 287 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/utils/test_file_utils.py | 493 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/utils/test_file_utils.py | 495 | # ============================================================================= | COMMENT |
| MEDIUM | tests/utils/test_file_utils.py | 573 | # ============================================================================= | COMMENT |
| MEDIUM | tests/utils/test_file_utils.py | 575 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 22 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 24 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 91 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 93 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 132 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 134 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 185 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 187 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 223 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 225 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 260 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 262 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 298 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 300 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 353 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note_kebab_filenames.py | 355 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/mcp/test_tool_write_note.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cli/test_json_output.py | 126 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cli/test_json_output.py | 128 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cli/test_json_output.py | 190 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cli/test_json_output.py | 195 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cli/test_json_output.py | 304 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/cli/test_json_output.py | 306 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/cli/test_json_output.py | 40 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/cli/test_json_output.py | 42 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/cli/test_json_output.py | 363 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/cli/test_json_output.py | 365 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/cli/test_json_output.py | 387 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/cli/test_json_output.py | 389 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/cli/test_json_output.py | 411 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/cli/test_json_output.py | 413 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/services/test_link_resolver.py | 916 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/services/test_link_resolver.py | 918 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/services/test_link_resolver.py | 1073 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/services/test_link_resolver.py | 1075 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/services/test_link_resolver.py | 1114 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/services/test_link_resolver.py | 1116 | # ============================================================================ | COMMENT |
| MEDIUM | tests/services/test_link_resolver.py | 604 | # ============================================================================ | COMMENT |
| MEDIUM | tests/services/test_link_resolver.py | 606 | # ============================================================================ | COMMENT |
| MEDIUM | integrations/openclaw/scripts/setup-bm.sh | 9 | # ── check for uv ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | integrations/openclaw/scripts/setup-bm.sh | 18 | # ── install basic-memory ──────────────────────────────── | COMMENT |
| MEDIUM | integrations/openclaw/scripts/setup-bm.sh | 29 | # ── verify ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | integrations/hermes/__init__.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | integrations/hermes/__init__.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | integrations/hermes/__init__.py | 61 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | integrations/hermes/__init__.py | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | integrations/hermes/__init__.py | 663 | # --------------------------------------------------------------------------- | COMMENT |
| 81 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/claude-code/hooks/pre-compact.sh | 59 | except Exception: | CODE |
| LOW | plugins/claude-code/hooks/pre-compact.sh | 76 | except Exception: | CODE |
| LOW | plugins/claude-code/hooks/pre-compact.sh | 120 | except Exception: | CODE |
| LOW | plugins/claude-code/hooks/pre-compact.sh | 139 | except Exception: | CODE |
| LOW | plugins/claude-code/hooks/pre-compact.sh | 230 | except Exception: | CODE |
| LOW | plugins/claude-code/hooks/session-start.sh | 73 | except Exception: | CODE |
| LOW | plugins/claude-code/hooks/session-start.sh | 92 | except Exception: | CODE |
| LOW | plugins/claude-code/hooks/session-start.sh | 150 | except Exception: | CODE |
| LOW | plugins/codex/hooks/session-start.py | 40 | except Exception: | CODE |
| LOW | plugins/codex/hooks/session-start.py | 51 | except Exception: | CODE |
| LOW | plugins/codex/hooks/session-start.py | 78 | except Exception: | CODE |
| MEDIUM | plugins/codex/hooks/session-start.py | 37 | def parse_payload() -> dict: | CODE |
| LOW | plugins/codex/hooks/pre-compact.py | 39 | except Exception: | CODE |
| LOW | plugins/codex/hooks/pre-compact.py | 48 | except Exception: | CODE |
| LOW | plugins/codex/hooks/pre-compact.py | 81 | except Exception: | CODE |
| LOW | plugins/codex/hooks/pre-compact.py | 92 | except Exception: | CODE |
| LOW | plugins/codex/hooks/pre-compact.py | 106 | except Exception: | CODE |
| LOW | plugins/codex/hooks/pre-compact.py | 226 | except Exception: | CODE |
| MEDIUM | plugins/codex/hooks/pre-compact.py | 36 | def parse_payload() -> dict: | CODE |
| LOW | tests/test_production_cascade_delete.py | 248 | except Exception as e: | CODE |
| LOW | tests/test_production_cascade_delete.py | 279 | except Exception as e: | CODE |
| LOW | tests/test_production_cascade_delete.py | 349 | except Exception as e: | CODE |
| LOW⚡ | tests/repository/test_postgres_search_repository.py | 98 | except Exception: | CODE |
| LOW | tests/importers/test_importer_base.py | 27 | except Exception as e: | CODE |
| LOW | tests/mcp/test_tool_recent_activity.py | 50 | except Exception as e: | CODE |
| LOW | tests/mcp/test_tool_build_context.py | 180 | except Exception as e: | CODE |
| LOW | tests/mcp/test_tool_move_note.py | 134 | except Exception: | CODE |
| LOW | tests/mcp/test_tool_move_note.py | 411 | except Exception: | CODE |
| LOW | tests/mcp/test_tool_move_note.py | 493 | except Exception: | CODE |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 95 | except Exception as e: | CODE |
| LOW⚡ | tests/services/test_project_service.py | 894 | except Exception: | CODE |
| LOW⚡ | tests/services/test_project_service.py | 898 | except Exception: | CODE |
| LOW | tests/services/test_project_service.py | 138 | except Exception as e: | CODE |
| LOW | tests/services/test_project_service.py | 143 | except Exception: | CODE |
| LOW | tests/services/test_project_service.py | 703 | except Exception: | CODE |
| LOW | tests/services/test_project_service.py | 707 | except Exception: | CODE |
| LOW | tests/services/test_project_service.py | 1513 | except Exception: | CODE |
| LOW | tests/services/test_project_service.py | 1696 | except Exception: | CODE |
| LOW | tests/services/test_project_removal_bug.py | 129 | except Exception as e: | CODE |
| LOW | tests/services/test_project_removal_bug.py | 146 | except Exception: | CODE |
| LOW | tests/services/test_project_removal_bug.py | 150 | except Exception: | CODE |
| LOW | tests/services/test_project_removal_bug.py | 360 | except Exception: | CODE |
| LOW | .agents/skills/instrumentation/SKILL.md | 98 | except Exception: | CODE |
| MEDIUM | integrations/hermes/__init__.py | 1063 | def _bg() -> None: | CODE |
| MEDIUM | integrations/hermes/__init__.py | 1129 | def _bg() -> None: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 57 | except Exception as _e: # pragma: no cover | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 653 | except Exception: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 659 | except Exception: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 1081 | except Exception as e: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 1091 | except Exception: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 1097 | except Exception: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 1745 | except Exception as e: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 1754 | except Exception as e: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 1763 | except Exception: | CODE |
| LOW⚡ | integrations/hermes/__init__.py | 1815 | except Exception: | CODE |
| LOW | integrations/hermes/__init__.py | 339 | except Exception as e: | CODE |
| LOW | integrations/hermes/__init__.py | 391 | except Exception: | CODE |
| LOW | integrations/hermes/__init__.py | 405 | except Exception as e: | CODE |
| LOW | integrations/hermes/__init__.py | 470 | except Exception: | CODE |
| LOW | integrations/hermes/__init__.py | 504 | except Exception: | CODE |
| 261 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/conftest.py | 0 | create the shared semantic postgres engine once per test session. | STRING |
| HIGH | test-int/conftest.py | 0 | create the shared semantic postgres engine once per test session. | STRING |
| HIGH | test-int/semantic/conftest.py | 0 | create the shared semantic postgres engine once per test session. | STRING |
| HIGH | tests/mcp/conftest.py | 0 | create test client that both mcp and tests will use. | STRING |
| HIGH | tests/cli/conftest.py | 0 | create test client that both mcp and tests will use. | STRING |
| HIGH | test-int/conftest.py | 0 | create test client that both mcp and tests will use. | STRING |
| HIGH | tests/cli/test_project_info_cloud_status.py | 0 | write config.json under a temporary home and return the file path. | STRING |
| HIGH | tests/cli/test_project_list_and_ls.py | 0 | write config.json under a temporary home and return the file path. | STRING |
| HIGH | tests/cli/test_json_output.py | 0 | write config.json under a temporary home and return the file path. | STRING |
| HIGH | tests/api/v2/test_knowledge_router.py | 0 | verify v2 project endpoints require project external_id uuid, not name. | STRING |
| HIGH | tests/api/v2/test_resource_router.py | 0 | verify v2 project endpoints require project external_id uuid, not name. | STRING |
| HIGH | tests/api/v2/test_project_router.py | 0 | verify v2 project endpoints require project external_id uuid, not name. | STRING |
| HIGH | test-int/mcp/test_pagination_integration.py | 0 | parse a fastmcp tool result content block into json. | STRING |
| HIGH | test-int/mcp/test_workspace_permalink_integration.py | 0 | parse a fastmcp tool result content block into json. | STRING |
| HIGH | test-int/mcp/test_output_format_json_integration.py | 0 | parse a fastmcp tool result content block into json. | STRING |
| HIGH | …cp/test_observation_permalink_collision_integration.py | 0 | parse a fastmcp tool result content block into json. | STRING |
| HIGH | src/basic_memory/repository/relation_repository.py | 0 | initialize with project_id filter. args: project_id: project id to filter all operations by | STRING |
| HIGH | src/basic_memory/repository/entity_repository.py | 0 | initialize with project_id filter. args: project_id: project id to filter all operations by | STRING |
| HIGH | src/basic_memory/repository/observation_repository.py | 0 | initialize with project_id filter. args: project_id: project id to filter all operations by | STRING |
| HIGH | …/basic_memory/repository/postgres_search_repository.py | 0 | create table if not exists search_vector_chunks ( id bigserial primary key, entity_id integer not null, project_id integ | STRING |
| HIGH | src/basic_memory/models/search.py | 0 | create table if not exists search_vector_chunks ( id bigserial primary key, entity_id integer not null, project_id integ | STRING |
| HIGH | …ions/h1b2c3d4e5f6_add_postgres_vector_search_tables.py | 0 | create table if not exists search_vector_chunks ( id bigserial primary key, entity_id integer not null, project_id integ | STRING |
| HIGH | …/basic_memory/repository/postgres_search_repository.py | 0 | create index if not exists idx_search_vector_chunks_project_entity on search_vector_chunks (project_id, entity_id) | STRING |
| HIGH | src/basic_memory/models/search.py | 0 | create index if not exists idx_search_vector_chunks_project_entity on search_vector_chunks (project_id, entity_id) | STRING |
| HIGH | …ions/h1b2c3d4e5f6_add_postgres_vector_search_tables.py | 0 | create index if not exists idx_search_vector_chunks_project_entity on search_vector_chunks (project_id, entity_id) | STRING |
| HIGH | src/basic_memory/mcp/container.py | 0 | create container by reading configmanager. this is the single point where api reads global config. | STRING |
| HIGH | src/basic_memory/cli/container.py | 0 | create container by reading configmanager. this is the single point where api reads global config. | STRING |
| HIGH | src/basic_memory/api/container.py | 0 | create container by reading configmanager. this is the single point where api reads global config. | STRING |
| HIGH | src/basic_memory/mcp/clients/memory.py | 0 | initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id ( | STRING |
| HIGH | src/basic_memory/mcp/clients/resource.py | 0 | initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id ( | STRING |
| HIGH | src/basic_memory/mcp/clients/search.py | 0 | initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id ( | STRING |
| HIGH | src/basic_memory/mcp/clients/directory.py | 0 | initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id ( | STRING |
| HIGH | src/basic_memory/mcp/clients/knowledge.py | 0 | initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id ( | STRING |
| HIGH | src/basic_memory/mcp/clients/schema.py | 0 | initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id ( | STRING |
| HIGH | src/basic_memory/cli/commands/import_memory_json.py | 0 | get markdownprocessor and fileservice instances for importers. | STRING |
| HIGH | src/basic_memory/cli/commands/import_chatgpt.py | 0 | get markdownprocessor and fileservice instances for importers. | STRING |
| HIGH | src/basic_memory/cli/commands/import_claude_projects.py | 0 | get markdownprocessor and fileservice instances for importers. | STRING |
| HIGH | …sic_memory/cli/commands/import_claude_conversations.py | 0 | get markdownprocessor and fileservice instances for importers. | STRING |
| HIGH | …rsions/d7e8f9a0b1c2_add_structured_metadata_indexes.py | 0 | check if a column exists in a table (idempotent migration support). | STRING |
| HIGH | …rsions/j3d4e5f6g7h8_rename_entity_type_to_note_type.py | 0 | check if a column exists in a table (idempotent migration support). | STRING |
| HIGH | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 0 | check if a column exists in a table (idempotent migration support). | STRING |
| HIGH | …g7h8i9_add_created_by_and_last_updated_by_to_entity.py | 0 | check if a column exists in a table (idempotent migration support). | STRING |
| HIGH | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 0 | check if a column exists in a table (idempotent migration support). | STRING |
| HIGH | …rsions/d7e8f9a0b1c2_add_structured_metadata_indexes.py | 0 | check if an index exists (idempotent migration support). | STRING |
| HIGH | …rsions/j3d4e5f6g7h8_rename_entity_type_to_note_type.py | 0 | check if an index exists (idempotent migration support). | STRING |
| HIGH | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 0 | check if an index exists (idempotent migration support). | STRING |
| HIGH | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 0 | check if an index exists (idempotent migration support). | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/mcp/test_tool_write_note.py | 635 | # Step 2: Create second note with different title | COMMENT |
| LOW⚡ | tests/mcp/test_tool_write_note.py | 643 | # Step 3: Try to create/replace first note again | COMMENT |
| LOW | tests/mcp/test_tool_write_note.py | 300 | # Step 1: Create initial note (auto-generated permalink) | COMMENT |
| LOW | tests/mcp/test_tool_write_note.py | 321 | # Step 2: Update with content that includes custom permalink in frontmatter | COMMENT |
| LOW | tests/mcp/test_tool_write_note.py | 624 | # Step 1: Create first note | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 46 | # Step 1: Create test project | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 51 | # Step 2: Create related entities that would cause foreign key constraint issues | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 91 | # Step 3: Attempt to remove the project | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 106 | # Step 4: Verify project was successfully removed | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 110 | # Step 5: Verify related data was cascade deleted | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 52 | # Step 1: Add the test project | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 60 | # Step 2: Create related entities for this project | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 76 | # Step 3: Create observations for the entity | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 81 | # Step 4: Create relations involving the entity | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 106 | # Step 5: Attempt to remove the project | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 110 | # Step 6: Verify everything was properly deleted | COMMENT |
| LOW | tests/services/test_entity_service.py | 2305 | # Step 1: Create first entity "Node A" | STRING |
| LOW | tests/services/test_entity_service.py | 2329 | # Step 2: Create Node B to match live test scenario | STRING |
| LOW | tests/services/test_entity_service.py | 2341 | # Step 3: Create Node C - this is where the bug occurs in live testing | STRING |
| LOW | .agents/skills/instrumentation/SKILL.md | 24 | ## Step 1: Detect Language and Frameworks | COMMENT |
| LOW | .claude/commands/release/changelog.md | 18 | ### Step 1: Version Analysis | COMMENT |
| LOW | .claude/commands/release/changelog.md | 34 | ### Step 2: Categorize Changes | COMMENT |
| LOW | .claude/commands/release/changelog.md | 59 | ### Step 3: Generate Changelog Entry | COMMENT |
| LOW | .claude/commands/release/changelog.md | 104 | ### Step 4: Integration | COMMENT |
| LOW | .claude/commands/release/release-check.md | 17 | ### Step 1: Environment Validation | COMMENT |
| LOW | .claude/commands/release/release-check.md | 28 | ### Step 2: Code Quality Gates | COMMENT |
| LOW | .claude/commands/release/release-check.md | 46 | ### Step 3: Documentation Validation | COMMENT |
| LOW | .claude/commands/release/release-check.md | 57 | ### Step 4: Dependency Validation | COMMENT |
| LOW | .claude/commands/release/release-check.md | 68 | ### Step 5: Issue Tracking Validation | COMMENT |
| LOW | .claude/commands/release/release.md | 17 | ### Step 1: Pre-flight Validation | COMMENT |
| LOW | .claude/commands/release/release.md | 38 | ### Step 2: Use Justfile Automation | COMMENT |
| LOW | .claude/commands/release/release.md | 64 | ### Step 3: Monitor Release Process | COMMENT |
| LOW | .claude/commands/release/release.md | 72 | ### Step 4: Post-Release Validation | COMMENT |
| LOW | .claude/commands/release/beta.md | 17 | ### Step 1: Pre-flight Validation | COMMENT |
| LOW | .claude/commands/release/beta.md | 23 | ### Step 2: Use Justfile Automation | COMMENT |
| LOW | .claude/commands/release/beta.md | 39 | ### Step 3: Monitor Beta Release | COMMENT |
| LOW | .claude/commands/release/beta.md | 45 | ### Step 4: Beta Testing Instructions | COMMENT |
| LOW | docs/cloud-cli.md | 155 | # Step 1: Preview the initial sync (recommended) | COMMENT |
| LOW | docs/cloud-cli.md | 158 | # Step 2: If all looks good, run the actual sync | COMMENT |
| LOW⚡ | test-int/mcp/test_chatgpt_tools_integration.py | 430 | # Step 1: Create multiple documents | COMMENT |
| LOW | test-int/mcp/test_chatgpt_tools_integration.py | 466 | # Step 2: Search for API-related content (as ChatGPT would) | COMMENT |
| LOW | test-int/mcp/test_chatgpt_tools_integration.py | 477 | # Step 3: Fetch one of the search results (as ChatGPT would) | COMMENT |
| LOW⚡ | test-int/mcp/test_project_state_sync_integration.py | 24 | # Step 1: Create a second project that we can switch to | COMMENT |
| LOW | test-int/mcp/test_project_state_sync_integration.py | 37 | # Step 2: Test that note operations work in the new project context | COMMENT |
| LOW⚡ | test-int/mcp/test_project_state_sync_integration.py | 52 | # Step 3: Test that we can read the note we just created | COMMENT |
| LOW⚡ | test-int/mcp/test_project_state_sync_integration.py | 60 | # Step 4: Test that edit operations work (this was failing in the original issue) | COMMENT |
| LOW | test-int/mcp/test_project_state_sync_integration.py | 76 | # Step 5: Verify the edit was applied | COMMENT |
| LOW | benchmarks/docs/benchmarks.md | 235 | ### Step 1: Create BM worktrees for target refs | COMMENT |
| LOW | benchmarks/docs/benchmarks.md | 250 | ### Step 2: Prepare benchmark datasets once | COMMENT |
| LOW | benchmarks/docs/benchmarks.md | 259 | ### Step 3: Run BM for each revision with deterministic run IDs | COMMENT |
| LOW | benchmarks/docs/benchmarks.md | 302 | ### Step 4: Run mem0 anchor once per dataset (optional but recommended) | COMMENT |
| LOW | benchmarks/docs/benchmarks.md | 330 | ### Step 5: Compare runs | COMMENT |
| LOW | benchmarks/docs/benchmarks.md | 348 | ### Step 6: Record matrix results | COMMENT |
| LOW | skills/memory-ingest/SKILL.md | 30 | ## Step 1: Parse Raw Input | COMMENT |
| LOW | skills/memory-ingest/SKILL.md | 41 | ## Step 2: Extract Entities | COMMENT |
| LOW | skills/memory-ingest/SKILL.md | 59 | ## Step 3: Search Existing Entities | COMMENT |
| LOW | skills/memory-ingest/SKILL.md | 81 | ## Step 4: Research New Entities (Optional) | COMMENT |
| LOW | skills/memory-ingest/SKILL.md | 93 | ## Step 5: Present Entity Proposal | COMMENT |
| LOW | skills/memory-ingest/SKILL.md | 112 | ## Step 6: Create the Source Note | COMMENT |
| LOW | skills/memory-ingest/SKILL.md | 195 | ## Step 7: Create Approved Entities | STRING |
| 35 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_config.py | 1282 | "json": "jq . {file} > {file}.tmp && mv {file}.tmp {file}", | CODE |
| HIGH | tests/importers/test_conversation_indexing.py | 131 | ), f"Search permalink should not be null, got: {search_result.permalink}" | CODE |
| HIGH | tests/utils/test_file_utils.py | 27 | # Skip marker for tests that use Unix-specific commands (cat, sh, sleep, /dev/null) | COMMENT |
| HIGH | tests/utils/test_parse_tags.py | 23 | # None entries (e.g. YAML `tags: [alpha, null]`) are skipped, not revived as "None" | COMMENT |
| HIGH | tests/mcp/test_tool_edit_note.py | 623 | # Call edit_note with explicit None for all optional fields (simulates MCP null) | COMMENT |
| HIGH | tests/mcp/test_async_client_modes.py | 478 | '{"access_token":"oauth-token-456","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}', | CODE |
| HIGH | tests/mcp/test_async_client_modes.py | 542 | '{"access_token":"oauth-control-123","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}', | CODE |
| HIGH | tests/cli/cloud/test_cloud_api_client_and_utils.py | 29 | '{"access_token":"token-123","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}', | CODE |
| HIGH | tests/cli/cloud/test_cloud_api_client_and_utils.py | 62 | '{"access_token":"token-123","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}', | CODE |
| HIGH | tests/cli/cloud/test_cloud_api_client_and_utils.py | 108 | '{"access_token":"token-123","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}', | CODE |
| HIGH | tests/cli/cloud/test_cloud_api_client_and_utils.py | 316 | '{"access_token":"oauth-token-456","refresh_token":null,' | CODE |
| HIGH | …nchmarks/src/basic_memory_benchmarks/scoring/review.py | 139 | if (labels[id] === undefined) delete labels[id]; | CODE |
| HIGH | …nchmarks/src/basic_memory_benchmarks/scoring/review.py | 154 | if (ok && fl) ok = (fl==="unlabeled") ? !lab : (lab===fl); | CODE |
| HIGH | …nchmarks/src/basic_memory_benchmarks/scoring/review.py | 170 | human_label: labels[c.query_id + "__" + c.provider] || null, | CODE |
| HIGH | …nchmarks/src/basic_memory_benchmarks/scoring/review.py | 172 | const blob = new Blob([JSON.stringify({{run: RUN, labels: out}}, null, 1)], {{type: "application/json"}}); | CODE |
| HIGH | src/basic_memory/utils.py | 534 | # Skip None entries (e.g. a YAML `tags: [alpha, null]`) so they are not revived as | COMMENT |
| HIGH | src/basic_memory/markdown/plugins.py | 21 | # if it's a markdown_task, return false | COMMENT |
| HIGH | src/basic_memory/api/v2/routers/knowledge_router.py | 154 | Only includes resolved relations (where to_id is not null). | STRING |
| HIGH | src/basic_memory/api/v2/routers/knowledge_router.py | 176 | # Fetch all resolved relations (to_id is not null) with eager-loaded entities | COMMENT |
| HIGH | …basic_memory/indexing/accepted_note_mutation_runner.py | 88 | (checksum null). Keep the message text and key names stable (issue #1445). | STRING |
| HIGH | src/basic_memory/services/context_service.py | 546 | ELSE eg.entity_path || e.id::text || ',' | CODE |
| HIGH | src/basic_memory/services/context_service.py | 706 | eg.entity_path || e.id || ',' as entity_path | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/codex/hooks/pre-compact.py | 55 | CODE | |
| LOW | plugins/codex/hooks/pre-compact.py | 69 | CODE | |
| LOW | tests/cli/test_ignore_utils.py | 97 | CODE | |
| LOW | tests/services/test_project_service.py | 101 | CODE | |
| LOW | tests/services/test_project_service.py | 260 | CODE | |
| LOW | tests/services/test_project_service.py | 370 | CODE | |
| LOW | tests/services/test_project_service.py | 650 | CODE | |
| LOW | tests/services/test_project_service.py | 843 | CODE | |
| LOW | tests/services/test_project_service.py | 1633 | CODE | |
| LOW | tests/services/test_project_removal_bug.py | 34 | CODE | |
| LOW | integrations/hermes/__init__.py | 418 | CODE | |
| LOW | integrations/hermes/__init__.py | 478 | CODE | |
| LOW | integrations/hermes/__init__.py | 703 | CODE | |
| LOW | integrations/hermes/__init__.py | 1441 | CODE | |
| LOW | integrations/hermes/__init__.py | 1731 | CODE | |
| LOW | integrations/hermes/__init__.py | 1514 | CODE | |
| LOW | test-int/test_search_performance_benchmark.py | 433 | CODE | |
| LOW | test-int/compare_search_benchmarks.py | 60 | CODE | |
| LOW | benchmarks/src/basic_memory_benchmarks/runner.py | 89 | CODE | |
| LOW | benchmarks/src/basic_memory_benchmarks/cli.py | 50 | CODE | |
| LOW | …basic_memory_benchmarks/providers/supermemory_local.py | 82 | CODE | |
| LOW | …marks/src/basic_memory_benchmarks/datasets/convomem.py | 84 | CODE | |
| LOW | …basic_memory_benchmarks/converters/locomo_to_corpus.py | 37 | CODE | |
| LOW | …sic_memory_benchmarks/converters/convomem_to_corpus.py | 55 | CODE | |
| LOW | src/basic_memory/config.py | 622 | CODE | |
| LOW | src/basic_memory/config.py | 960 | CODE | |
| LOW | src/basic_memory/utils.py | 75 | CODE | |
| LOW | src/basic_memory/utils.py | 511 | CODE | |
| LOW | src/basic_memory/utils.py | 603 | CODE | |
| LOW | src/basic_memory/ignore_utils.py | 156 | CODE | |
| LOW | src/basic_memory/ignore_utils.py | 188 | CODE | |
| LOW | src/basic_memory/ignore_utils.py | 223 | CODE | |
| LOW | src/basic_memory/repository/metadata_filters.py | 62 | CODE | |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 158 | CODE | |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 241 | CODE | |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 751 | CODE | |
| LOW | …/basic_memory/repository/postgres_search_repository.py | 716 | CODE | |
| LOW | …/basic_memory/repository/embedding_provider_factory.py | 118 | CODE | |
| LOW | src/basic_memory/repository/search_repository_base.py | 871 | CODE | |
| LOW | …asic_memory/importers/claude_conversations_importer.py | 139 | CODE | |
| LOW | src/basic_memory/importers/claude_projects_importer.py | 30 | CODE | |
| LOW | src/basic_memory/importers/project_zip_import.py | 51 | CODE | |
| LOW | src/basic_memory/importers/memory_json_importer.py | 30 | CODE | |
| LOW | src/basic_memory/markdown/plugins.py | 152 | CODE | |
| LOW | src/basic_memory/markdown/plugins.py | 235 | CODE | |
| LOW | src/basic_memory/markdown/plugins.py | 247 | CODE | |
| LOW | src/basic_memory/markdown/entity_parser.py | 129 | CODE | |
| LOW | src/basic_memory/runtime/process.py | 17 | CODE | |
| LOW | src/basic_memory/mcp/project_context.py | 121 | CODE | |
| LOW | src/basic_memory/mcp/project_context.py | 262 | CODE | |
| LOW | src/basic_memory/mcp/project_context.py | 1075 | CODE | |
| LOW | src/basic_memory/mcp/project_context.py | 1125 | CODE | |
| LOW | src/basic_memory/mcp/project_context.py | 1275 | CODE | |
| LOW | src/basic_memory/mcp/project_context.py | 1538 | CODE | |
| LOW | src/basic_memory/mcp/tools/edit_note.py | 328 | CODE | |
| LOW | src/basic_memory/mcp/tools/delete_note.py | 195 | CODE | |
| LOW | src/basic_memory/mcp/tools/utils.py | 77 | CODE | |
| LOW | src/basic_memory/mcp/tools/write_note.py | 69 | CODE | |
| LOW | src/basic_memory/mcp/tools/search.py | 627 | CODE | |
| LOW | src/basic_memory/mcp/tools/read_note.py | 89 | CODE | |
| 56 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 266 | # Set BASIC_MEMORY_HOME to the test directory | COMMENT |
| LOW | tests/conftest.py | 781 | # Write file | COMMENT |
| LOW⚡ | tests/test_config.py | 568 | # Set default to a project that exists with exact name match | COMMENT |
| LOW | tests/test_production_cascade_delete.py | 118 | # Check if CASCADE DELETE is configured | COMMENT |
| LOW | tests/test_production_cascade_delete.py | 232 | # Check if entity was cascade deleted | COMMENT |
| LOW | tests/test_production_cascade_delete.py | 252 | # Check if it's a foreign key constraint error | COMMENT |
| LOW | tests/test_production_cascade_delete.py | 306 | # Check if foreign keys are enabled | COMMENT |
| LOW | tests/markdown/test_markdown_processor.py | 40 | # Write file | COMMENT |
| LOW | tests/markdown/test_markdown_processor.py | 89 | # Write file | COMMENT |
| LOW | tests/utils/test_utf8_handling.py | 47 | # Read the file back and verify content | STRING |
| LOW | tests/utils/test_utf8_handling.py | 83 | # Write the file | STRING |
| LOW | tests/utils/test_utf8_handling.py | 138 | # Write the file | STRING |
| LOW | tests/mcp/test_obsidian_yaml_formatting.py | 24 | # Read the file directly to check YAML formatting | COMMENT |
| LOW | tests/mcp/test_obsidian_yaml_formatting.py | 55 | # Read the file to check formatting | COMMENT |
| LOW | tests/mcp/test_tool_write_note.py | 1398 | # Set config to allow overwrites by default | COMMENT |
| LOW | tests/mcp/test_tool_write_note.py | 491 | # Write the file back | STRING |
| LOW | tests/cli/test_project_set_cloud_local.py | 219 | # Set back to local — supply --local-path; existing config path is preserved | COMMENT |
| LOW | tests/cli/test_project_add_with_local_path.py | 67 | # Set HOME to tmp_path so ConfigManager uses our test config | COMMENT |
| LOW | tests/services/test_project_removal_bug.py | 130 | # Check if this is the specific foreign key constraint error from the bug report | COMMENT |
| LOW | tests/services/test_file_service.py | 53 | # Write file and get checksum | COMMENT |
| LOW⚡ | tests/services/test_file_service.py | 206 | # Write file | COMMENT |
| LOW | test-int/conftest.py | 373 | # Set BASIC_MEMORY_HOME to the test directory | COMMENT |
| LOW | test-int/semantic/test_search_diagnostics.py | 229 | # Check if the database entity outranks irrelevant observations | COMMENT |
| LOW | test-int/semantic/test_search_diagnostics.py | 466 | # Check if bullets have any context (they shouldn't in current impl) | COMMENT |
| LOW | src/basic_memory/db.py | 117 | # Check if Postgres backend is configured (for backward compatibility) | COMMENT |
| LOW | src/basic_memory/config.py | 647 | # Check if already in new format — peek at first value | COMMENT |
| LOW | src/basic_memory/config.py | 1012 | # Check if projects dict uses old string-value format | COMMENT |
| LOW | src/basic_memory/config.py | 1019 | # Check if any project has local_sync_path set but path is a cloud slug | COMMENT |
| LOW | src/basic_memory/utils.py | 44 | # Check if this is a Windows absolute path (e.g., C:\Users\...) | COMMENT |
| LOW | src/basic_memory/utils.py | 119 | # Check if we have CJK characters that should be preserved | COMMENT |
| LOW | src/basic_memory/utils.py | 546 | # Check if it's a JSON array string (common issue from AI assistants) | COMMENT |
| LOW | src/basic_memory/ignore_utils.py | 249 | # Check if the first part of the path matches the directory name | STRING |
| LOW | src/basic_memory/ignore_utils.py | 261 | # Check if any path part matches the directory name | STRING |
| LOW | src/basic_memory/ignore_utils.py | 270 | # Check if any individual path part matches the glob pattern | STRING |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 256 | # Check if term is already a proper wildcard pattern (alphanumeric + *) | COMMENT |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 304 | # Check if term needs quoting | COMMENT |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 311 | # Check if any individual word contains special characters that need quoting | COMMENT |
| LOW | src/basic_memory/repository/entity_repository.py | 433 | # Check if this is a FOREIGN KEY constraint failure | COMMENT |
| LOW | src/basic_memory/repository/entity_repository.py | 618 | # Check if this is a FOREIGN KEY constraint failure | COMMENT |
| LOW | …/basic_memory/repository/postgres_search_repository.py | 233 | # Check if term is already a wildcard pattern | COMMENT |
| LOW | src/basic_memory/repository/search_repository_base.py | 785 | # Check if this paragraph contains bullet items | COMMENT |
| LOW⚡ | src/basic_memory/repository/repository.py | 41 | # Check if this model has a project_id column | COMMENT |
| LOW | …asic_memory/importers/claude_conversations_importer.py | 77 | # Write file using relative path - FileService handles base_path | COMMENT |
| LOW | src/basic_memory/importers/memory_json_importer.py | 112 | # Write file using relative path - FileService handles base_path | COMMENT |
| LOW | src/basic_memory/importers/chatgpt_importer.py | 67 | # Write file using relative path - FileService handles base_path | COMMENT |
| LOW | src/basic_memory/importers/chatgpt_importer.py | 245 | # Add children to stack in reverse order to maintain conversation flow | COMMENT |
| LOW | src/basic_memory/markdown/entity_parser.py | 190 | # Check if the path is already absolute | COMMENT |
| LOW | src/basic_memory/mcp/tools/view_note.py | 74 | # Check if this is an error message (note not found) | COMMENT |
| LOW | src/basic_memory/mcp/tools/search.py | 1148 | # Check if we got no results and provide helpful guidance | COMMENT |
| LOW | src/basic_memory/mcp/tools/move_note.py | 281 | # Check if note exists in Basic Memory | COMMENT |
| LOW | src/basic_memory/mcp/tools/move_note.py | 904 | # Check if extensions match | STRING |
| LOW | src/basic_memory/cli/commands/db.py | 355 | # Check if it's a cloud-only project — those can't be reindexed locally | COMMENT |
| LOW | src/basic_memory/cli/commands/format.py | 92 | # Check if formatting is enabled | COMMENT |
| LOW | src/basic_memory/cli/commands/cloud/upload.py | 45 | # Check if path exists | COMMENT |
| LOW | src/basic_memory/cli/commands/cloud/upload.py | 113 | # Read file content asynchronously | COMMENT |
| LOW | src/basic_memory/cli/commands/cloud/upload.py | 233 | # Check if file should be ignored | COMMENT |
| LOW | src/basic_memory/cli/commands/cloud/upload_command.py | 89 | # Check if project exists | COMMENT |
| LOW | src/basic_memory/cli/commands/cloud/rclone_commands.py | 665 | # Check if first run requires resync | COMMENT |
| LOW | src/basic_memory/api/v2/routers/project_router.py | 162 | # Check if project already exists before attempting to add | COMMENT |
| LOW | src/basic_memory/api/v2/routers/project_router.py | 524 | # Check if trying to delete the default project | COMMENT |
| 9 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/mcp/test_tool_write_note.py | 635 | # Step 2: Create second note with different title | COMMENT |
| LOW⚡ | tests/mcp/test_tool_write_note.py | 643 | # Step 3: Try to create/replace first note again | COMMENT |
| LOW | tests/mcp/test_tool_write_note.py | 300 | # Step 1: Create initial note (auto-generated permalink) | COMMENT |
| LOW | tests/mcp/test_tool_write_note.py | 321 | # Step 2: Update with content that includes custom permalink in frontmatter | COMMENT |
| LOW | tests/mcp/test_tool_write_note.py | 624 | # Step 1: Create first note | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 46 | # Step 1: Create test project | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 51 | # Step 2: Create related entities that would cause foreign key constraint issues | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 91 | # Step 3: Attempt to remove the project | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 106 | # Step 4: Verify project was successfully removed | COMMENT |
| LOW⚡ | tests/db/test_issue_254_foreign_key_constraints.py | 110 | # Step 5: Verify related data was cascade deleted | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 52 | # Step 1: Add the test project | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 60 | # Step 2: Create related entities for this project | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 76 | # Step 3: Create observations for the entity | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 81 | # Step 4: Create relations involving the entity | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 106 | # Step 5: Attempt to remove the project | COMMENT |
| LOW⚡ | tests/services/test_project_removal_bug.py | 110 | # Step 6: Verify everything was properly deleted | COMMENT |
| LOW | tests/services/test_entity_service.py | 2305 | # Step 1: Create first entity "Node A" | STRING |
| LOW | tests/services/test_entity_service.py | 2329 | # Step 2: Create Node B to match live test scenario | STRING |
| LOW | tests/services/test_entity_service.py | 2341 | # Step 3: Create Node C - this is where the bug occurs in live testing | STRING |
| LOW⚡ | test-int/mcp/test_chatgpt_tools_integration.py | 430 | # Step 1: Create multiple documents | COMMENT |
| LOW | test-int/mcp/test_chatgpt_tools_integration.py | 466 | # Step 2: Search for API-related content (as ChatGPT would) | COMMENT |
| LOW | test-int/mcp/test_chatgpt_tools_integration.py | 477 | # Step 3: Fetch one of the search results (as ChatGPT would) | COMMENT |
| LOW⚡ | test-int/mcp/test_project_state_sync_integration.py | 24 | # Step 1: Create a second project that we can switch to | COMMENT |
| LOW | test-int/mcp/test_project_state_sync_integration.py | 37 | # Step 2: Test that note operations work in the new project context | COMMENT |
| LOW⚡ | test-int/mcp/test_project_state_sync_integration.py | 52 | # Step 3: Test that we can read the note we just created | COMMENT |
| LOW⚡ | test-int/mcp/test_project_state_sync_integration.py | 60 | # Step 4: Test that edit operations work (this was failing in the original issue) | COMMENT |
| LOW | test-int/mcp/test_project_state_sync_integration.py | 76 | # Step 5: Verify the edit was applied | COMMENT |
| LOW | src/basic_memory/mcp/project_context.py | 1586 | # Step 1: Resolve project name from config (no network call) | COMMENT |
| LOW | src/basic_memory/mcp/project_context.py | 1617 | # Step 2: Check explicit routing BEFORE workspace resolution | COMMENT |
| LOW | src/basic_memory/mcp/project_context.py | 1635 | # Step 3: Determine if cloud routing is needed | COMMENT |
| LOW | src/basic_memory/mcp/project_context.py | 1746 | # Step 4: Local routing (default) | COMMENT |
| LOW⚡ | src/basic_memory/cli/auth.py | 272 | # Step 1: Request device authorization | COMMENT |
| LOW⚡ | src/basic_memory/cli/auth.py | 277 | # Step 2: Display user instructions | COMMENT |
| LOW⚡ | src/basic_memory/cli/auth.py | 280 | # Step 3: Poll for token | COMMENT |
| LOW⚡ | src/basic_memory/cli/auth.py | 288 | # Step 4: Save tokens | COMMENT |
| LOW | src/basic_memory/cli/commands/cloud/core_commands.py | 231 | # Step 1: Install rclone | COMMENT |
| LOW⚡ | src/basic_memory/cli/commands/cloud/core_commands.py | 262 | # Step 2: Get tenant info (scoped to the target workspace when given) | COMMENT |
| LOW⚡ | src/basic_memory/cli/commands/cloud/core_commands.py | 267 | # Step 3: Generate credentials for that tenant's bucket | COMMENT |
| LOW⚡ | src/basic_memory/cli/commands/cloud/core_commands.py | 272 | # Step 4: Configure the tenant's rclone remote | COMMENT |
| LOW⚡ | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 76 | # Step 1: Add external_id column as nullable first | COMMENT |
| LOW⚡ | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 79 | # Step 2: Generate UUIDs for existing rows | COMMENT |
| LOW⚡ | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 97 | # Step 3: Make external_id NOT NULL | STRING |
| LOW⚡ | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 105 | # Step 4: Create unique index on project.external_id (idempotent) | STRING |
| LOW⚡ | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 114 | # Step 1: Add external_id column as nullable first | STRING |
| LOW⚡ | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 117 | # Step 2: Generate UUIDs for existing rows | STRING |
| LOW⚡ | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 135 | # Step 3: Make external_id NOT NULL | STRING |
| LOW⚡ | …/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py | 143 | # Step 4: Create unique index on entity.external_id (idempotent) | STRING |
| LOW⚡ | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 75 | # Step 1: Add project_id column as nullable first (idempotent) | COMMENT |
| LOW⚡ | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 79 | # Step 2: Backfill project_id from entity.project_id via from_id | COMMENT |
| LOW | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 98 | # Step 3: Make project_id NOT NULL and add foreign key | STRING |
| LOW⚡ | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 119 | # Step 4: Create index on relation.project_id (idempotent) | STRING |
| LOW⚡ | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 127 | # Step 1: Add project_id column as nullable first (idempotent) | STRING |
| LOW⚡ | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 131 | # Step 2: Backfill project_id from entity.project_id via entity_id | STRING |
| LOW | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 150 | # Step 3: Make project_id NOT NULL and add foreign key | STRING |
| LOW | …/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py | 171 | # Step 4: Create index on observation.project_id (idempotent) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_alembic_env.py | 23 | def set_main_option(self, name: str, value: str) -> None: | CODE |
| LOW | tests/mcp/test_client_info.py | 25 | async def set_state(self, key: str, value: object) -> None: | CODE |
| LOW | tests/mcp/conftest.py | 32 | async def set_state(self, key: str, value: object, **kwargs) -> None: | CODE |
| LOW | tests/mcp/test_tool_telemetry.py | 21 | def set_attributes(self, attrs: dict) -> None: | CODE |
| LOW | tests/mcp/test_tool_telemetry.py | 24 | def set_attribute(self, key: str, value) -> None: | CODE |
| LOW⚡ | tests/mcp/test_client_telemetry.py | 26 | def set_attribute(self, key: str, value) -> None: | CODE |
| LOW⚡ | tests/mcp/test_client_telemetry.py | 29 | def set_attributes(self, new_attrs: dict) -> None: | CODE |
| LOW | benchmarks/src/basic_memory_benchmarks/__init__.py | 5 | __all__ = ["main"] | CODE |
| LOW | benchmarks/src/basic_memory_benchmarks/llm/__init__.py | 12 | __all__ = [ | CODE |
| LOW⚡ | scripts/update_versions.py | 80 | def set_server_version(data: dict[str, Any], version: str) -> None: | CODE |
| LOW⚡ | scripts/update_versions.py | 87 | def set_claude_marketplace_version(data: dict[str, Any], version: str) -> None: | CODE |
| LOW⚡ | scripts/update_versions.py | 95 | def set_package_version(data: dict[str, Any], version: str) -> None: | CODE |
| LOW | scripts/update_versions.py | 107 | def _update_core(version: str, *, dry_run: bool) -> None: | CODE |
| LOW | scripts/update_versions.py | 121 | def _update_packages(version: str, *, dry_run: bool) -> None: | CODE |
| LOW | scripts/update_versions.py | 161 | def update_versions(raw_version: str, *, scope: str = "all", dry_run: bool) -> None: | CODE |
| LOW | src/basic_memory/config.py | 777 | def set_project_mode(self, project_name: str, mode: ProjectMode) -> None: | CODE |
| LOW | src/basic_memory/config.py | 1142 | def set_default_project(self, name: str) -> None: | CODE |
| LOW | src/basic_memory/telemetry.py | 64 | __all__ = ["configure_telemetry", "get_logfire_handler"] | CODE |
| LOW | src/basic_memory/project_resolver.py | 117 | __all__ = [ | CODE |
| LOW | src/basic_memory/repository/__init__.py | 11 | __all__ = [ | CODE |
| LOW | src/basic_memory/repository/search_repository.py | 161 | __all__ = [ | CODE |
| LOW⚡ | src/basic_memory/repository/repository.py | 44 | def _set_project_id_if_needed(self, model: T) -> None: | CODE |
| LOW | …asic_memory/importers/claude_conversations_importer.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/basic_memory/importers/claude_projects_importer.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/basic_memory/importers/__init__.py | 23 | __all__ = [ | CODE |
| LOW | src/basic_memory/importers/memory_json_importer.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/basic_memory/importers/base.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/basic_memory/importers/chatgpt_importer.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/basic_memory/markdown/__init__.py | 13 | __all__ = [ | CODE |
| LOW | src/basic_memory/mcp/container.py | 104 | def set_container(container: McpContainer) -> None: | CODE |
| LOW | src/basic_memory/mcp/async_client.py | 337 | def set_client_factory(factory: Callable[..., AbstractAsyncContextManager[AsyncClient]]) -> None: | CODE |
| LOW | src/basic_memory/mcp/project_context.py | 115 | def set_workspace_provider(provider: Callable[[], Awaitable[list[WorkspaceInfo]]]) -> None: | CODE |
| LOW | src/basic_memory/mcp/clients/__init__.py | 22 | __all__ = [ | CODE |
| LOW | src/basic_memory/mcp/ui/__init__.py | 5 | __all__ = ["get_ui_variant", "load_html", "load_variant_html"] | CODE |
| LOW | src/basic_memory/mcp/tools/__init__.py | 39 | __all__ = [ | CODE |
| LOW | src/basic_memory/mcp/resources/__init__.py | 17 | __all__ = [ | CODE |
| LOW | src/basic_memory/mcp/prompts/__init__.py | 14 | __all__ = [ | CODE |
| LOW | src/basic_memory/models/__init__.py | 8 | __all__ = [ | CODE |
| LOW | src/basic_memory/cli/container.py | 68 | def set_container(container: CliContainer) -> None: | CODE |
| LOW | src/basic_memory/cli/commands/__init__.py | 16 | __all__ = [ | CODE |
| LOW | src/basic_memory/schemas/__init__.py | 59 | __all__ = [ | CODE |
| LOW | src/basic_memory/schemas/v2/__init__.py | 30 | __all__ = [ | CODE |
| LOW | src/basic_memory/schema/__init__.py | 34 | __all__ = [ | CODE |
| LOW | src/basic_memory/cloud/__init__.py | 32 | __all__ = [ | CODE |
| LOW | src/basic_memory/api/__init__.py | 5 | __all__ = ["app"] | CODE |
| LOW | src/basic_memory/api/container.py | 132 | def set_container(container: ApiContainer) -> None: | CODE |
| LOW | src/basic_memory/api/v2/__init__.py | 26 | __all__ = [ | CODE |
| LOW | src/basic_memory/api/v2/routers/__init__.py | 13 | __all__ = [ | CODE |
| LOW | src/basic_memory/api/v2/routers/importer_router.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/basic_memory/deps/__init__.py | 181 | __all__ = [ | CODE |
| LOW | src/basic_memory/services/project_service.py | 374 | async def set_default_project(self, name: str) -> None: | CODE |
| LOW | src/basic_memory/services/directory_service.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | src/basic_memory/services/__init__.py | 8 | __all__ = ["BaseService", "FileService", "EntityService", "ProjectService"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/repository/test_hybrid_fusion.py | 65 | CODE | |
| LOW | tests/repository/test_vector_pagination.py | 50 | CODE | |
| LOW | tests/repository/test_vector_threshold.py | 54 | CODE | |
| LOW | tests/repository/test_semantic_search_base.py | 77 | CODE | |
| LOW | benchmarks/src/basic_memory_benchmarks/cli.py | 209 | CODE | |
| LOW | benchmarks/src/basic_memory_benchmarks/cli.py | 372 | CODE | |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 751 | CODE | |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 965 | CODE | |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 1118 | CODE | |
| LOW | …/basic_memory/repository/postgres_search_repository.py | 211 | CODE | |
| LOW | …/basic_memory/repository/postgres_search_repository.py | 716 | CODE | |
| LOW | …/basic_memory/repository/postgres_search_repository.py | 913 | CODE | |
| LOW | …/basic_memory/repository/postgres_search_repository.py | 1077 | CODE | |
| LOW | src/basic_memory/repository/search_repository.py | 36 | CODE | |
| LOW | src/basic_memory/repository/search_repository.py | 57 | CODE | |
| LOW | src/basic_memory/repository/search_repository_base.py | 261 | CODE | |
| LOW | src/basic_memory/repository/search_repository_base.py | 302 | CODE | |
| LOW | src/basic_memory/repository/litellm_provider.py | 88 | CODE | |
| LOW | src/basic_memory/repository/repository.py | 396 | CODE | |
| LOW | src/basic_memory/mcp/tools/edit_note.py | 328 | CODE | |
| LOW | src/basic_memory/mcp/tools/ui_sdk.py | 32 | CODE | |
| LOW | src/basic_memory/mcp/tools/utils.py | 191 | CODE | |
| LOW | src/basic_memory/mcp/tools/utils.py | 283 | CODE | |
| LOW | src/basic_memory/mcp/tools/utils.py | 388 | CODE | |
| LOW | src/basic_memory/mcp/tools/utils.py | 497 | CODE | |
| LOW | src/basic_memory/mcp/tools/utils.py | 634 | CODE | |
| LOW | src/basic_memory/mcp/tools/write_note.py | 69 | CODE | |
| LOW | src/basic_memory/mcp/tools/search.py | 627 | CODE | |
| LOW | src/basic_memory/mcp/tools/recent_activity.py | 48 | CODE | |
| LOW | src/basic_memory/mcp/tools/build_context.py | 149 | CODE | |
| LOW | src/basic_memory/cli/commands/ci.py | 49 | CODE | |
| LOW | src/basic_memory/cli/commands/tool.py | 60 | CODE | |
| LOW | src/basic_memory/cli/commands/tool.py | 388 | CODE | |
| LOW | src/basic_memory/cli/commands/tool.py | 452 | CODE | |
| LOW | src/basic_memory/cli/commands/tool.py | 517 | CODE | |
| LOW | src/basic_memory/cli/commands/project.py | 717 | CODE | |
| LOW | src/basic_memory/cli/commands/cloud/rclone_commands.py | 582 | CODE | |
| LOW | src/basic_memory/services/context_service.py | 110 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/utils/test_frontmatter_obsidian_compatible.py | 110 | post.metadata["authors"] = ["John Doe", "Jane Smith"] | CODE |
| LOW | tests/mcp/test_project_context.py | 722 | name="Acme Corp", | CODE |
| LOW | tests/mcp/test_tool_project_management.py | 914 | cloud_workspace_name="Acme Corp", | CODE |
| LOW | tests/mcp/test_tool_project_management.py | 925 | assert merged[0]["workspace_name"] == "Acme Corp" | CODE |
| LOW⚡ | tests/schema/test_diff.py | 143 | notes[0] = _note("n0", observations=[Obs("name", "P0"), Obs("fax", "555-1234")]) | CODE |
| LOW⚡ | tests/schema/test_validator.py | 137 | result = validate_note("test-note", schema, [], [Rel("works_at", "Acme Corp")]) | CODE |
| LOW⚡ | tests/schema/test_validator.py | 141 | assert result.field_results[0].values == ["Acme Corp"] | CODE |
| LOW⚡ | tests/schema/test_validator.py | 235 | relations = [Rel("works_at", "Acme Corp"), Rel("friends_with", "Bob")] | CODE |
| LOW | docs/ai-assistant-guide-extended.md | 676 | "email": "user@example.com", | CODE |
| LOW⚡ | integrations/openclaw/openclaw.plugin.json | 38 | "placeholder": "my-agent", | CODE |
| LOW⚡ | integrations/openclaw/openclaw.plugin.json | 43 | "placeholder": "memory/", | CODE |
| LOW⚡ | integrations/openclaw/openclaw.plugin.json | 48 | "placeholder": "MEMORY.md", | CODE |
| LOW⚡ | integrations/openclaw/openclaw.plugin.json | 53 | "placeholder": "bm", | CODE |
| LOW⚡ | integrations/openclaw/openclaw.plugin.json | 63 | "placeholder": "10", | CODE |
| LOW⚡ | integrations/openclaw/openclaw.plugin.json | 73 | "placeholder": "Check for active tasks and recent activity...", | CODE |
| LOW | integrations/openclaw/openclaw.plugin.json | 84 | "placeholder": ".", | CODE |
| LOW | integrations/openclaw/tools/list-workspaces.test.ts | 63 | name: "Acme Corp", | CODE |
| LOW | integrations/openclaw/tools/list-workspaces.test.ts | 93 | name: "Acme Corp", | CODE |
| LOW | test-int/mcp/test_param_aliases_integration.py | 148 | "find_text": "placeholder", | CODE |
| LOW⚡ | test-int/mcp/test_read_content_integration.py | 302 | This is section {i + 1} with substantial content. Lorem ipsum dolor sit amet, | CODE |
| LOW⚡ | test-int/mcp/test_read_content_integration.py | 302 | This is section {i + 1} with substantial content. Lorem ipsum dolor sit amet, | CODE |
| LOW | test-int/mcp/test_read_content_integration.py | 341 | assert "Lorem ipsum" in content | STRING |
| LOW⚡ | test-int/mcp/test_long_relation_type_integration.py | 30 | "**Lorem ipsum dolor sit amet** — consectetur adipiscing elit, sed do eiusmod " | CODE |
| LOW⚡ | test-int/mcp/test_long_relation_type_integration.py | 30 | "**Lorem ipsum dolor sit amet** — consectetur adipiscing elit, sed do eiusmod " | CODE |
| LOW | skills/memory-research/SKILL.md | 50 | search_notes(query="Acme Corp") | CODE |
| LOW | skills/memory-research/SKILL.md | 122 | title="Acme Corp", | CODE |
| LOW | skills/memory-research/SKILL.md | 217 | identifier="Acme Corp", | CODE |
| LOW | …c/basic_memory/mcp/ui/html/search-results-tool-ui.html | 20 | `).replace(N1,"")}function Nw(e,t){return t=KL(t),KL(e)===t}function me(e,t,a,n,r,o){switch(a){case"children":typeof n== | CODE |
| LOW | src/basic_memory/mcp/ui/html/note-preview-tool-ui.html | 20 | `).replace(r1,"")}function Jm(l,t){return t=er(t),er(l)===t}function Z(l,t,a,e,n,u){switch(a){case"children":typeof e==" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose-postgres.yml | 1 | # Docker Compose configuration for Basic Memory with PostgreSQL | COMMENT |
| LOW | docker-compose-postgres.yml | 41 | COMMENT | |
| LOW | docker-compose.yml | 61 | interval: 30s | COMMENT |
| LOW | docker-compose.yml | 81 | COMMENT | |
| LOW | plugins/claude-code/hooks/pre-compact.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | plugins/claude-code/hooks/session-start.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/markdown/test_entity_parser.py | 261 | # | COMMENT |
| LOW | tests/mcp/test_tool_resource.py | 241 | # Skip testing the large document size handling since it would require | COMMENT |
| LOW | tests/db/test_issue_254_foreign_key_constraints.py | 161 | # Document the current error for tracking | COMMENT |
| LOW | docs/ai-assistant-guide-extended.md | 101 | # "note_count": 156, | COMMENT |
| LOW | integrations/hermes/__init__.py | 1701 | # PluginManager reach-in — workaround for Hermes's memory-provider collector | COMMENT |
| LOW | integrations/hermes/.github/workflows/release.yml | 1 | name: release | COMMENT |
| LOW | .github/workflows/claude.yml | 61 | additional_permissions: | | COMMENT |
| LOW | src/basic_memory/db.py | 21 | ) | COMMENT |
| LOW | src/basic_memory/db.py | 581 | # Trigger: run_migrations() created a temporary engine while module-level | COMMENT |
| LOW | src/basic_memory/config.py | 841 | COMMENT | |
| LOW | src/basic_memory/repository/sqlite_search_repository.py | 821 | COMMENT | |
| LOW | src/basic_memory/repository/project_repository.py | 221 | COMMENT | |
| LOW | src/basic_memory/repository/note_content_repository.py | 221 | ) | COMMENT |
| LOW | src/basic_memory/repository/fastembed_provider.py | 241 | # filesystem check positively confirms a corrupt cache subdir (the | COMMENT |
| LOW | src/basic_memory/mcp/tools/search.py | 901 | # Validate pagination arguments before they reach the API/repository layer. | COMMENT |
| LOW | src/basic_memory/mcp/tools/search.py | 921 | note_types = parse_str_list(note_types) if note_types is not None else [] | COMMENT |
| LOW | src/basic_memory/mcp/tools/search.py | 1101 | return ( | COMMENT |
| LOW | src/basic_memory/mcp/tools/read_note.py | 301 | ] | COMMENT |
| LOW | src/basic_memory/mcp/tools/move_note.py | 661 | COMMENT | |
| LOW | src/basic_memory/mcp/resources/__init__.py | 1 | """MCP resources for Basic Memory.""" | COMMENT |
| LOW | src/basic_memory/mcp/resources/__init__.py | 21 | # "note_preview_ui_tool_ui", | COMMENT |
| LOW | src/basic_memory/api/v2/routers/knowledge_router.py | 421 | detail=f"File path '{data.file_path}' is not normalized - " | COMMENT |
| LOW | src/basic_memory/alembic/alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | src/basic_memory/alembic/alembic.ini | 21 | # Any required deps can installed by adding `alembic[tz]` to the pip requirements | COMMENT |
| LOW | src/basic_memory/alembic/alembic.ini | 41 | # The path separator used here should be the separator specified by "version_path_separator" below. | COMMENT |
| LOW | src/basic_memory/alembic/alembic.ini | 61 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/repository/test_project_repository.py | 135 | # So just create a non-default project | COMMENT |
| MEDIUM | integrations/hermes/.github/workflows/release.yml | 7 | # git tag (`v*.*.*`) — NOT from __init__.py. This is robust to PRs that | COMMENT |
| MEDIUM | test-int/semantic/litellm_live_harness.py | 345 | # live calls when someone discovers the harness through `just --list`. | COMMENT |
| LOW | src/basic_memory/file_utils.py | 491 | # No frontmatter, just return content | COMMENT |
| LOW | src/basic_memory/ignore_utils.py | 217 | # If we can't read .gitignore, just use default patterns | STRING |
| MEDIUM | …c/basic_memory/mcp/ui/html/search-results-tool-ui.html | 20 | `).replace(N1,"")}function Nw(e,t){return t=KL(t),KL(e)===t}function me(e,t,a,n,r,o){switch(a){case"children":typeof n== | CODE |
| MEDIUM | src/basic_memory/mcp/ui/html/note-preview-tool-ui.html | 20 | `).replace(r1,"")}function Jm(l,t){return t=er(t),er(l)===t}function Z(l,t,a,e,n,u){switch(a){case"children":typeof e==" | CODE |
| MEDIUM | src/basic_memory/mcp/tools/search.py | 718 | """Search across all content in the knowledge base with comprehensive syntax support. | STRING |
| MEDIUM | src/basic_memory/mcp/tools/move_note.py | 949 | # misleading the agent (#881 Gap 2). This is the robust backstop behind | STRING |
| MEDIUM | src/basic_memory/mcp/resources/project_info.py | 22 | """Get comprehensive information about the current Basic Memory project. | STRING |
| MEDIUM | src/basic_memory/services/project_service.py | 568 | # Update in database using robust lookup | COMMENT |
| MEDIUM | src/basic_memory/services/project_service.py | 603 | # Get project from database using robust lookup | COMMENT |
| MEDIUM | src/basic_memory/services/project_service.py | 645 | """Get comprehensive information about the specified Basic Memory project. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 179 | "*/services/initialization.py", # Startup orchestration + background tasks (watchers); exercised indirectly in entry | CODE |
| MEDIUM | plugins/claude-code/hooks/pre-compact.sh | 6 | # the context window (and the texture of the session is about to be lost), we | COMMENT |
| MEDIUM | test-int/BENCHMARKS.md | 77 | ### Optional guardrails (recommended for nightly runs only) | COMMENT |
| MEDIUM | …ic_memory_benchmarks/providers/baseline_fullcontext.py | 26 | # with room for prompt scaffolding. LongMemEval-S groups (~115K tokens) fit. | COMMENT |
| MEDIUM⚡ | src/basic_memory/repository/search_repository_base.py | 848 | # Shared semantic search: sync_entity_vectors orchestration | COMMENT |
| MEDIUM | src/basic_memory/mcp/async_client.py | 330 | # Optional factory override for dependency injection. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | integrations/hermes/tests/test_prefetch.py | 105 | timeout = p._actor.call.call_args.kwargs.get("timeout") or p._actor.call.call_args[1].get( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/mcp/test_project_context.py | 3143 | CODE | |
| MEDIUM | tests/mcp/test_tool_edit_note.py | 917 | CODE | |
| MEDIUM | tests/mcp/test_tool_edit_note.py | 1118 | CODE | |
| MEDIUM | tests/mcp/tools/test_search_notes_multi_project.py | 179 | CODE | |
| MEDIUM | tests/indexing/test_forward_reference_resolution.py | 361 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | test-int/mcp/test_edit_note_integration.py | 645 | assert "def test_function():" in content | CODE |
| LOW | test-int/mcp/test_edit_note_integration.py | 603 | def test_function(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose-postgres.yml | 7 | # Usage: | COMMENT |