Repository Analysis

basicmachines-co/basic-memory

AI conversations that actually remember. Never re-explain your project to your AI again. Join our Discord: https://discord.gg/tyvKNccgqN

29.5 Moderate AI signal View on GitHub

Analysis Overview

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).

29.5
Adjusted Score
29.5
Raw Score
100%
Time Factor
2026-07-14
Last Push
3.4K
Stars
Python
Language
271.1K
Lines of Code
1.0K
Files
6.8K
Pattern Hits
2026-07-14
Scan Date
0.17
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

Severity Breakdown

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.

CRITICAL 1HIGH 177MEDIUM 365LOW 6219

Directory Score Breakdown

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.

Pattern Findings

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.

Hyper-Verbose Identifiers4810 hits · 4522 pts
SeverityFileLineSnippetContext
LOWtests/test_coerce.py15 def test_native_list_passthrough(self):CODE
LOWtests/test_coerce.py21 def test_single_string_wrapped(self):CODE
LOWtests/test_coerce.py24 def test_non_json_string_wrapped(self):CODE
LOWtests/test_coerce.py27 def test_json_object_string_wrapped(self):CODE
LOWtests/test_coerce.py39 def test_none_parses_to_empty_list(self):CODE
LOWtests/test_coerce.py45 def test_list_with_comma_element_splits(self):CODE
LOWtests/test_coerce.py48 def test_plain_list_passthrough(self):CODE
LOWtests/test_coerce.py54 def test_int_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py58 def test_dict_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py62 def test_int_list_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py67 def test_dict_list_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py71 def test_mixed_list_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py76 def test_json_array_string_with_int_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py81 def test_json_array_string_with_dict_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py85 def test_json_array_string_mixed_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py90 def test_json_array_string_all_strings_still_parses(self):CODE
LOWtests/test_coerce.py100 def test_native_dict_passthrough(self):CODE
LOWtests/test_coerce.py106 def test_non_json_string_passthrough(self):CODE
LOWtests/test_coerce.py110 def test_json_array_string_passthrough(self):CODE
LOWtests/test_coerce.py123 def test_none_returns_empty_list(self):CODE
LOWtests/test_coerce.py128 def test_single_string_wraps_as_one_element(self):CODE
LOWtests/test_coerce.py135 def test_comma_string_with_spaces_strips(self):CODE
LOWtests/test_coerce.py143 def test_json_array_string_single_element(self):CODE
LOWtests/test_coerce.py146 def test_json_array_string_with_comma_elements(self):CODE
LOWtests/test_coerce.py152 def test_plain_list_passthrough(self):CODE
LOWtests/test_coerce.py155 def test_list_with_comma_element_splits(self):CODE
LOWtests/test_coerce.py159 def test_list_with_multiple_comma_elements(self):CODE
LOWtests/test_coerce.py164 def test_hash_prefix_preserved(self):CODE
LOWtests/test_coerce.py168 def test_hash_prefix_in_comma_string_preserved(self):CODE
LOWtests/test_coerce.py173 def test_int_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py176 def test_dict_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py182 def test_int_list_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py187 def test_mixed_list_passthrough_for_pydantic_rejection(self):CODE
LOWtests/test_coerce.py192 def test_dict_list_passthrough_for_pydantic_rejection(self):CODE
LOWtests/conftest.py98def _configured_postgres_sync_url() -> str | None:CODE
LOWtests/conftest.py139def _resolve_postgres_sync_url(postgres_container) -> str:CODE
LOWtests/conftest.py148async def _reset_postgres_test_schema(engine: AsyncEngine, async_url: str) -> None:CODE
LOWtests/conftest.py215def suppress_logfire_no_config_warning(monkeypatch) -> None:CODE
LOWtests/conftest.py242async def cleanup_global_db_after_test() -> AsyncGenerator[None, None]:CODE
LOWtests/test_runtime_storage_project_resolution.py24def test_storage_project_prefix_from_project_path_strips_legacy_mount_prefix() -> None:CODE
LOWtests/test_runtime_storage_project_resolution.py30def test_storage_object_key_from_project_prefix_joins_project_relative_path() -> None:CODE
LOWtests/test_runtime_storage_project_resolution.py42def test_storage_object_key_from_project_path_strips_legacy_project_mount() -> None:CODE
LOWtests/test_runtime_storage_project_resolution.py48def test_storage_project_prefix_resolution_prefers_exact_active_path() -> None:CODE
LOWtests/test_runtime_storage_project_resolution.py66def test_storage_project_prefix_resolution_uses_name_then_unique_path_suffix() -> None:CODE
LOWtests/test_runtime_storage_project_resolution.py90def test_storage_project_prefix_resolution_reports_ambiguous_suffix_matches() -> None:CODE
LOWtests/test_runtime_storage_project_resolution.py107def test_storage_project_prefix_resolution_reports_missing_project() -> None:CODE
LOWtests/test_pr_title_workflow.py6def _semantic_pr_action_inputs() -> dict:CODE
LOWtests/test_pr_title_workflow.py15def test_pr_title_workflow_allows_ci_scope() -> None:CODE
LOWtests/test_deps.py34async def project_with_special_chars(CODE
LOWtests/test_deps.py52async def test_get_project_config_with_spaces(CODE
LOWtests/test_deps.py75async def test_get_project_config_with_permalink(CODE
LOWtests/test_deps.py92async def test_get_project_config_with_special_chars(CODE
LOWtests/test_deps.py114async def test_get_project_config_not_found(project_repository: ProjectRepository, session_maker):CODE
LOWtests/test_deps.py128async def test_get_project_id_with_spaces(CODE
LOWtests/test_deps.py144async def test_get_project_id_with_permalink(CODE
LOWtests/test_deps.py160async def test_get_project_id_with_special_chars(CODE
LOWtests/test_deps.py176async def test_get_project_id_not_found(project_repository: ProjectRepository, session_maker):CODE
LOWtests/test_deps.py190async def test_get_project_id_fallback_to_name(CODE
LOWtests/test_deps.py211async def test_get_project_config_case_sensitivity(CODE
LOWtests/test_deps.py247async def test_validate_project_id_success(CODE
4750 more matches not shown…
Self-Referential Comments187 hits · 574 pts
SeverityFileLineSnippetContext
MEDIUMtests/conftest.py316 # Create a new ConfigManager that uses the test home directoryCOMMENT
MEDIUMtests/test_config.py542 # Create a test ConfigManager instanceCOMMENT
MEDIUMtests/test_config.py1018 # Create a project pathCOMMENT
MEDIUMtests/repository/test_search_repository.py496 # Create a search index row with project_idCOMMENT
MEDIUMtests/repository/test_observation_repository.py372 # Create a test observationCOMMENT
MEDIUMtests/repository/test_project_info_repository.py14 # Create a ProjectInfoRepositoryCOMMENT
MEDIUMtests/repository/test_project_info_repository.py26 # Create a ProjectInfoRepositoryCOMMENT
MEDIUMtests/repository/test_project_repository.py241 # Create a non-default projectCOMMENT
MEDIUMtests/repository/test_entity_repository_upsert.py217 # Create an entity firstCOMMENT
MEDIUMtests/repository/test_search_repository_edit_bug_fix.py52 # Create a separate in-memory database for this testCOMMENT
MEDIUMtests/repository/test_search_repository_edit_bug_fix.py56 # Create the database schemaCOMMENT
MEDIUMtests/repository/test_search_repository_edit_bug_fix.py191 # Create a separate in-memory database for this testCOMMENT
MEDIUMtests/repository/test_search_repository_edit_bug_fix.py195 # Create the database schemaCOMMENT
MEDIUMtests/repository/test_entity_repository.py200 # Create a target entity and relationCOMMENT
MEDIUMtests/repository/test_entity_repository.py938 # Create a second projectCOMMENT
MEDIUMtests/repository/test_entity_repository.py1004 # Create a second project with same permalinkCOMMENT
MEDIUMtests/importers/test_importer_base.py13# Create a concrete implementation of the abstract class for testingCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py17 # Create a file with malformed YAML frontmatterCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py53 # Create a file with completely broken YAMLCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py88 # Create a file without note_type in frontmatterCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py115 # Create a file with empty frontmatterCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py141 # Create a file with no frontmatter at allCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py165 # Create a file with null/None note_typeCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py191 # Create a file with null titleCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py217 # Create a file with empty titleCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py243 # Create a file with string "None" as title (common in templates)COMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py269 # Create a valid fileCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py309 # Create a file with completely broken YAML that will trigger the fallback pathCOMMENT
MEDIUMtests/markdown/test_entity_parser_error_handling.py351 # Create a file with user's custom frontmatter (like the bug report)COMMENT
MEDIUMtests/markdown/test_entity_parser.py237 # Create a test file in the project directorySTRING
MEDIUMtests/utils/test_validate_project_path.py275 # Create a very long but legitimate pathCOMMENT
MEDIUMtests/utils/test_validate_project_path.py343 # Create a directory outside the projectCOMMENT
MEDIUMtests/utils/test_validate_project_path.py443 # Create a more complex directory structureCOMMENT
MEDIUMtests/utils/test_validate_project_path.py452 # Create a sensitive file in the sibling directoryCOMMENT
MEDIUMtests/utils/test_utf8_handling.py16 # Create a test file with various UTF-8 charactersCOMMENT
MEDIUMtests/utils/test_utf8_handling.py65 # Create a test file with frontmatter containing UTF-8COMMENT
MEDIUMtests/utils/test_utf8_handling.py120 # Create a test file with UTF-8 charactersCOMMENT
MEDIUMtests/mcp/test_tool_canvas.py251 # Create a test file that we're referencingCOMMENT
MEDIUMtests/mcp/test_tool_schema.py272 # Create a person note but no schema noteCOMMENT
MEDIUMtests/mcp/test_tool_schema.py326 # Create a person with an extra "hobby" field not in the schemaCOMMENT
MEDIUMtests/mcp/test_obsidian_yaml_formatting.py11 # Create a note with tags using write_noteCOMMENT
MEDIUMtests/mcp/test_tool_resource.py137 # Create a text file via notesCOMMENT
MEDIUMtests/mcp/test_tool_resource.py173 # Create a test imageCOMMENT
MEDIUMtests/mcp/test_tool_delete_note.py130 # Create a note to deleteCOMMENT
MEDIUMtests/mcp/test_tool_search.py25 # Create a test noteCOMMENT
MEDIUMtests/mcp/test_tool_search.py59 # Create a test noteCOMMENT
MEDIUMtests/mcp/test_tool_search.py90 # Create a test noteCOMMENT
MEDIUMtests/mcp/test_tool_search.py124 # Create a test noteCOMMENT
MEDIUMtests/mcp/test_tool_search.py286 # Create a test noteCOMMENT
MEDIUMtests/mcp/test_prompts.py93 # Create a mock context with a file that has no permalink (like a binary file)COMMENT
MEDIUMtests/mcp/test_tool_view_note.py195 # Create a note with no clear title structureCOMMENT
MEDIUMtests/mcp/test_tool_edit_note.py307 # Create the note firstCOMMENT
MEDIUMtests/mcp/test_tool_edit_note.py332 # Create a note firstCOMMENT
MEDIUMtests/mcp/test_tool_edit_note.py354 # Create a note firstCOMMENT
MEDIUMtests/mcp/test_tool_edit_note.py376 # Create a note firstCOMMENT
MEDIUMtests/mcp/test_tool_edit_note.py451 # Create a noteCOMMENT
MEDIUMtests/mcp/test_tool_edit_note.py845 # Create a note firstCOMMENT
MEDIUMtests/mcp/test_tool_move_note.py610 # Create a note to test different identifier formatsCOMMENT
MEDIUMtests/mcp/test_tool_write_note.py268 # Create a note with custom permalink in frontmatterCOMMENT
MEDIUMtests/mcp/test_tool_write_note.py1163 # Create a note with all features to ensure security validation doesn't interfereCOMMENT
127 more matches not shown…
Docstring Block Structure108 hits · 540 pts
SeverityFileLineSnippetContext
HIGHsrc/basic_memory/utils.py20Normalize project path by stripping mount point prefix. In cloud deployments, the S3 bucket is mounted at /app/dataSTRING
HIGHsrc/basic_memory/utils.py76Generate a stable permalink from a file path. Args: file_path: Original file path (str, Path, or PathLike) STRING
HIGHsrc/basic_memory/file_utils.py56 Compute SHA-256 checksum of content. Args: content: Content to hash (either text string or bytes) STRING
HIGHsrc/basic_memory/file_utils.py394 Parse YAML frontmatter from content. Args: content: Content with YAML frontmatter Returns: STRING
HIGHsrc/basic_memory/file_utils.py435 Remove YAML frontmatter from content. Args: content: Content with frontmatter Returns: CoSTRING
HIGH…/basic_memory/repository/postgres_search_repository.py189Convert Boolean query to tsquery format. Args: query: A Boolean query like "coffee AND brewing" or STRING
HIGHsrc/basic_memory/markdown/markdown_processor.py65Write EntityMarkdown schema back to file. This is step 3 of our read->modify->write pattern. The entireSTRING
HIGHsrc/basic_memory/markdown/utils.py23 Convert markdown entity to model. Does not include relations. Args: file_path: Path to the markdown fiSTRING
HIGHsrc/basic_memory/mcp/project_context.py1192Get and validate project, setting it in context if available. Args: client: HTTP client for API calls STRING
HIGHsrc/basic_memory/mcp/project_context.py1543Resolve project, create correctly-routed client, and validate project. Solves the bootstrap problem: we need to knoSTRING
HIGHsrc/basic_memory/mcp/clients/memory.py53Build context from a memory path. Args: path: The path to build context for (without memory:// prefSTRING
HIGHsrc/basic_memory/mcp/clients/memory.py106Get recent activity. Args: timeframe: Time filter (e.g., "7d", "1 week", "2 days ago") STRING
HIGHsrc/basic_memory/mcp/clients/resource.py43Read a resource by entity ID. Args: entity_id: Entity external_id (UUID) Returns: STRING
HIGHsrc/basic_memory/mcp/clients/search.py50Search across all content in the knowledge base. Args: query: Search query dict (from SearchQuery.mSTRING
HIGHsrc/basic_memory/mcp/clients/directory.py47List directory contents. Args: dir_name: Directory path to list (default: root) depth: STRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py52Create a new entity. Args: entity_data: Entity data including title, content, folder, etc. STRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py85Update an existing entity (full replacement). Args: entity_id: Entity external_id (UUID) STRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py115Get an entity by ID. Args: entity_id: Entity external_id (UUID) Returns: EntitSTRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py147Partially update an entity. Args: entity_id: Entity external_id (UUID) patch_data: PartSTRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py177Delete an entity. Args: entity_id: Entity external_id (UUID) Returns: DeleteEnSTRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py205Move an entity to a new location. Args: entity_id: Entity external_id (UUID) destinatioSTRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py237Move all entities in a directory to a new location. Args: source_directory: Source directory path (STRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py270Delete all entities in a directory. Args: directory: Directory path to delete (relative to project STRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py301Index a markdown file that exists on disk but is not indexed yet. Args: file_path: Markdown file paSTRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py352Resolve a string identifier to an entity external_id. Args: identifier: The identifier to resolve (STRING
HIGHsrc/basic_memory/mcp/clients/project.py61Create a new project. Args: project_data: Project creation data (name, path, set_default) STRING
HIGHsrc/basic_memory/mcp/clients/project.py84Delete a project by its external ID. Args: project_external_id: Project external ID (UUID) STRING
HIGHsrc/basic_memory/mcp/clients/project.py108Resolve a project name/permalink to its full project record. Args: identifier: Project name or permSTRING
HIGHsrc/basic_memory/mcp/clients/project.py129Set a project as the default. Args: project_external_id: Project external ID (UUID) ReturnSTRING
HIGHsrc/basic_memory/mcp/clients/project.py151Update a project's configuration (e.g. path). Args: project_external_id: Project external ID (UUID)STRING
HIGHsrc/basic_memory/mcp/clients/project.py178Trigger a project indexing operation. Args: project_external_id: Project external ID (UUID) STRING
HIGHsrc/basic_memory/mcp/clients/project.py206Get the current project-index observation for a project. Args: project_external_id: Project externaSTRING
HIGHsrc/basic_memory/mcp/clients/project.py226Get detailed project information and statistics. Args: project_external_id: Project external ID (UUSTRING
HIGHsrc/basic_memory/mcp/clients/schema.py49Validate notes against their resolved schemas. Args: note_type: Optional note type to batch-validatSTRING
HIGHsrc/basic_memory/mcp/clients/schema.py82Infer a schema from existing notes of a given type. Args: note_type: The note type to analyze STRING
HIGHsrc/basic_memory/mcp/clients/schema.py104Show drift between schema definition and actual usage. Args: note_type: The note type to check for STRING
HIGHsrc/basic_memory/mcp/tools/read_content.py180Read a file's raw content by path or permalink. This tool provides direct access to file content in the knowledge bSTRING
HIGHsrc/basic_memory/mcp/tools/view_note.py30View a markdown note as a formatted artifact. This tool reads a note using the same logic as read_note but instructSTRING
HIGHsrc/basic_memory/mcp/tools/edit_note.py363Edit an existing markdown note in the knowledge base. Makes targeted changes to existing notes without rewriting thSTRING
HIGHsrc/basic_memory/mcp/tools/delete_note.py206Delete a note or directory from the knowledge base. Permanently removes a note or directory from the specified projSTRING
HIGHsrc/basic_memory/mcp/tools/utils.py206Make a GET request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use url:STRING
HIGHsrc/basic_memory/mcp/tools/utils.py302Make a PUT request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use url:STRING
HIGHsrc/basic_memory/mcp/tools/utils.py407Make a PATCH request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use urSTRING
HIGHsrc/basic_memory/mcp/tools/utils.py516Make a POST request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use urlSTRING
HIGHsrc/basic_memory/mcp/tools/utils.py603Resolve a string identifier to an entity external_id using the v2 API. Args: client: HTTP client for API caSTRING
HIGHsrc/basic_memory/mcp/tools/utils.py649Make a DELETE request and handle errors appropriately. Args: client: The HTTPX AsyncClient to use uSTRING
HIGHsrc/basic_memory/mcp/tools/write_note.py87Write a markdown note to the knowledge base. Creates a markdown note with semantic observations and relations. STRING
HIGHsrc/basic_memory/mcp/tools/search.py718Search across all content in the knowledge base with comprehensive syntax support. This tool searches the knowledgeSTRING
HIGHsrc/basic_memory/mcp/tools/read_note.py112Return the raw markdown for a note, or guidance text if no match is found. Finds and retrieves a note by its title,STRING
HIGHsrc/basic_memory/mcp/tools/recent_activity.py76Get recent activity for a specific project or across all projects. Project Resolution: The server resolves projSTRING
HIGHsrc/basic_memory/mcp/tools/move_note.py398Move a note or directory to a new location within the same project. Moves a note or directory from one location to STRING
HIGHsrc/basic_memory/mcp/tools/build_context.py181Get context needed to continue a discussion within a specific project. This tool enables natural continuation of diSTRING
HIGHsrc/basic_memory/mcp/tools/canvas.py44Create an Obsidian canvas file with the provided nodes and edges. This tool creates a .canvas file compatible with STRING
HIGHsrc/basic_memory/mcp/tools/list_directory.py45List directory contents from the knowledge base with optional filtering. This tool provides 'ls' functionality for STRING
HIGHsrc/basic_memory/mcp/tools/schema.py225Validate notes against their resolved schema. Validates a specific note (by identifier) or all notes of a given typSTRING
HIGHsrc/basic_memory/mcp/tools/schema.py345Analyze existing notes and suggest a schema definition. Examines observation categories and relation types across aSTRING
HIGHsrc/basic_memory/mcp/tools/schema.py472Detect drift between a schema definition and actual note usage. Compares the existing schema for a note type againsSTRING
HIGHsrc/basic_memory/mcp/resources/project_info.py22Get comprehensive information about the current Basic Memory project. This tool provides detailed statistics and stSTRING
HIGHsrc/basic_memory/cli/commands/cloud/cloud_utils.py135Check if a project exists on cloud. Args: project_name: Name of project to check workspace: OptionaSTRING
HIGHsrc/basic_memory/cli/commands/cloud/rclone_commands.py291One-way sync: local → cloud. Makes cloud identical to local using rclone sync. Args: project: Project STRING
48 more matches not shown…
Unused Imports611 hits · 534 pts
SeverityFileLineSnippetContext
LOWtests/test_rclone_commands.py3CODE
LOWtests/test_update_versions.py1CODE
LOWtests/test_telemetry.py3CODE
LOW…sts/repository/test_sqlite_vector_search_repository.py110CODE
LOWtests/runtime/test_note_move_destination.py1CODE
LOWtests/runtime/test_note_content_read_planning.py1CODE
LOWtests/runtime/test_accepted_note_write_guards.py1CODE
LOWtests/runtime/test_pending_note_materialization.py1CODE
LOWtests/runtime/test_deleted_note_file_checksum.py1CODE
LOWtests/runtime/test_deleted_note_response.py1CODE
LOWtests/mcp/test_client_info.py3CODE
LOWtests/mcp/test_project_context.py7CODE
LOWtests/mcp/test_project_context_telemetry.py3CODE
LOWtests/mcp/test_tool_telemetry.py3CODE
LOWtests/mcp/test_server_telemetry.py3CODE
LOWtests/mcp/test_client_telemetry.py3CODE
LOWtests/mcp/test_async_client_telemetry.py3CODE
LOWtests/mcp/test_tool_read_content.py7CODE
LOWtests/mcp/test_tool_json_output_modes.py3CODE
LOWtests/cli/test_workspace_stub.py13CODE
LOWtests/cli/test_workspace_commands.py15CODE
LOWtests/cli/test_project_set_cloud_local.py11CODE
LOWtests/cli/test_db_reset_zombie_check.py3CODE
LOWtests/cli/test_auto_update.py3CODE
LOWtests/cli/test_cloud_status.py3CODE
LOWtests/cli/test_cli_telemetry.py3CODE
LOWtests/cli/test_cloud_authentication.py3CODE
LOWtests/cli/test_import_chatgpt.py9CODE
LOWtests/cli/test_import_claude_conversations.py9CODE
LOWtests/cli/test_import_claude_projects.py9CODE
LOWtests/cli/test_orphans_command.py13CODE
LOWtests/cloud/test_note_content_read_service.py1CODE
LOWtests/cloud/test_project_deletes.py1CODE
LOWtests/cloud/test_cloud_services.py1CODE
LOWtests/cloud/test_note_content_materialization.py3CODE
LOWtests/api/v2/test_memory_hydration.py7CODE
LOWtests/api/v2/test_knowledge_router_telemetry.py3CODE
LOWtests/api/v2/test_search_hydration.py7CODE
LOWtests/api/v2/test_utils_telemetry.py3CODE
LOWtests/api/v2/test_search_router_telemetry.py3CODE
LOWtests/index/test_local_project_index.py3CODE
LOWtests/index/test_watch_service.py3CODE
LOWtests/index/test_watch_coordinator.py3CODE
LOWtests/index/test_local_reconcile_file_reader.py3CODE
LOWtests/indexing/test_vector_sync_planning.py3CODE
LOWtests/indexing/test_orphan_cleanup.py3CODE
LOW…sts/indexing/test_note_content_batch_reconciliation.py3CODE
LOWtests/indexing/test_note_content_read_repair_runner.py3CODE
LOWtests/indexing/test_note_content_reconciler.py3CODE
LOWtests/indexing/test_batch_indexer.py3CODE
LOWtests/indexing/test_batch_index_search_writer.py3CODE
LOWtests/indexing/test_accepted_note_write_runner.py3CODE
LOWtests/indexing/test_file_indexer.py3CODE
LOWtests/indexing/test_project_index_runtime.py3CODE
LOWtests/indexing/test_accepted_note_mutation_runner.py3CODE
LOWtests/indexing/test_index_batch_runtime.py3CODE
LOWtests/services/test_search_service_telemetry.py3CODE
LOWtests/services/test_initialization.py7CODE
LOWtests/services/test_entity_service_telemetry.py3CODE
LOWtests/services/test_entity_service_prepare.py3CODE
551 more matches not shown…
Decorative Section Separators141 hits · 499 pts
SeverityFileLineSnippetContext
MEDIUMtests/conftest.py55# =============================================================================COMMENT
MEDIUMtests/conftest.py57# =============================================================================COMMENT
MEDIUMtests/repository/test_relation_repository.py406# -------------------------------------------------------------------------COMMENT
MEDIUMtests/repository/test_relation_repository.py408# -------------------------------------------------------------------------COMMENT
MEDIUMtests/repository/test_entity_repository.py966# -------------------------------------------------------------------------COMMENT
MEDIUMtests/repository/test_entity_repository.py968# -------------------------------------------------------------------------COMMENT
MEDIUMtests/utils/test_file_utils.py285# =============================================================================COMMENT
MEDIUMtests/utils/test_file_utils.py287# =============================================================================COMMENT
MEDIUMtests/utils/test_file_utils.py493# =============================================================================COMMENT
MEDIUMtests/utils/test_file_utils.py495# =============================================================================COMMENT
MEDIUMtests/utils/test_file_utils.py573# =============================================================================COMMENT
MEDIUMtests/utils/test_file_utils.py575# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py22# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py24# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py91# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py93# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py132# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py134# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py185# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py187# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py223# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py225# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py260# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py262# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py298# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py300# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py353# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note_kebab_filenames.py355# =============================================================================COMMENT
MEDIUMtests/mcp/test_tool_write_note.py15# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/mcp/test_tool_write_note.py17# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py126# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py128# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py190# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py195# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py304# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py306# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py40# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py42# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py363# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py365# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py387# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py389# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py411# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/cli/test_json_output.py413# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/services/test_link_resolver.py916# ============================================================================COMMENT
MEDIUMtests/services/test_link_resolver.py918# ============================================================================COMMENT
MEDIUMtests/services/test_link_resolver.py1073# ============================================================================COMMENT
MEDIUMtests/services/test_link_resolver.py1075# ============================================================================COMMENT
MEDIUMtests/services/test_link_resolver.py1114# ============================================================================COMMENT
MEDIUMtests/services/test_link_resolver.py1116# ============================================================================COMMENT
MEDIUMtests/services/test_link_resolver.py604# ============================================================================COMMENT
MEDIUMtests/services/test_link_resolver.py606# ============================================================================COMMENT
MEDIUMintegrations/openclaw/scripts/setup-bm.sh9# ── check for uv ──────────────────────────────────────────────────COMMENT
MEDIUMintegrations/openclaw/scripts/setup-bm.sh18# ── install basic-memory ────────────────────────────────COMMENT
MEDIUMintegrations/openclaw/scripts/setup-bm.sh29# ── verify ────────────────────────────────────────────────────────COMMENT
MEDIUMintegrations/hermes/__init__.py46# ---------------------------------------------------------------------------COMMENT
MEDIUMintegrations/hermes/__init__.py48# ---------------------------------------------------------------------------COMMENT
MEDIUMintegrations/hermes/__init__.py61# ---------------------------------------------------------------------------COMMENT
MEDIUMintegrations/hermes/__init__.py63# ---------------------------------------------------------------------------COMMENT
MEDIUMintegrations/hermes/__init__.py663# ---------------------------------------------------------------------------COMMENT
81 more matches not shown…
Excessive Try-Catch Wrapping321 hits · 307 pts
SeverityFileLineSnippetContext
LOWplugins/claude-code/hooks/pre-compact.sh59except Exception:CODE
LOWplugins/claude-code/hooks/pre-compact.sh76 except Exception:CODE
LOWplugins/claude-code/hooks/pre-compact.sh120 except Exception:CODE
LOWplugins/claude-code/hooks/pre-compact.sh139 except Exception:CODE
LOWplugins/claude-code/hooks/pre-compact.sh230except Exception:CODE
LOWplugins/claude-code/hooks/session-start.sh73except Exception:CODE
LOWplugins/claude-code/hooks/session-start.sh92 except Exception:CODE
LOWplugins/claude-code/hooks/session-start.sh150 except Exception:CODE
LOWplugins/codex/hooks/session-start.py40 except Exception:CODE
LOWplugins/codex/hooks/session-start.py51 except Exception:CODE
LOWplugins/codex/hooks/session-start.py78 except Exception:CODE
MEDIUMplugins/codex/hooks/session-start.py37def parse_payload() -> dict:CODE
LOWplugins/codex/hooks/pre-compact.py39 except Exception:CODE
LOWplugins/codex/hooks/pre-compact.py48 except Exception:CODE
LOWplugins/codex/hooks/pre-compact.py81 except Exception:CODE
LOWplugins/codex/hooks/pre-compact.py92 except Exception:CODE
LOWplugins/codex/hooks/pre-compact.py106 except Exception:CODE
LOWplugins/codex/hooks/pre-compact.py226 except Exception:CODE
MEDIUMplugins/codex/hooks/pre-compact.py36def parse_payload() -> dict:CODE
LOWtests/test_production_cascade_delete.py248 except Exception as e:CODE
LOWtests/test_production_cascade_delete.py279 except Exception as e:CODE
LOWtests/test_production_cascade_delete.py349 except Exception as e:CODE
LOWtests/repository/test_postgres_search_repository.py98 except Exception:CODE
LOWtests/importers/test_importer_base.py27 except Exception as e:CODE
LOWtests/mcp/test_tool_recent_activity.py50 except Exception as e:CODE
LOWtests/mcp/test_tool_build_context.py180 except Exception as e:CODE
LOWtests/mcp/test_tool_move_note.py134 except Exception:CODE
LOWtests/mcp/test_tool_move_note.py411 except Exception:CODE
LOWtests/mcp/test_tool_move_note.py493 except Exception:CODE
LOWtests/db/test_issue_254_foreign_key_constraints.py95 except Exception as e:CODE
LOWtests/services/test_project_service.py894 except Exception:CODE
LOWtests/services/test_project_service.py898 except Exception:CODE
LOWtests/services/test_project_service.py138 except Exception as e:CODE
LOWtests/services/test_project_service.py143 except Exception:CODE
LOWtests/services/test_project_service.py703 except Exception:CODE
LOWtests/services/test_project_service.py707 except Exception:CODE
LOWtests/services/test_project_service.py1513 except Exception:CODE
LOWtests/services/test_project_service.py1696 except Exception:CODE
LOWtests/services/test_project_removal_bug.py129 except Exception as e:CODE
LOWtests/services/test_project_removal_bug.py146 except Exception:CODE
LOWtests/services/test_project_removal_bug.py150 except Exception:CODE
LOWtests/services/test_project_removal_bug.py360 except Exception:CODE
LOW.agents/skills/instrumentation/SKILL.md98except Exception:CODE
MEDIUMintegrations/hermes/__init__.py1063def _bg() -> None:CODE
MEDIUMintegrations/hermes/__init__.py1129def _bg() -> None:CODE
LOWintegrations/hermes/__init__.py57except Exception as _e: # pragma: no coverCODE
LOWintegrations/hermes/__init__.py653 except Exception:CODE
LOWintegrations/hermes/__init__.py659 except Exception:CODE
LOWintegrations/hermes/__init__.py1081 except Exception as e:CODE
LOWintegrations/hermes/__init__.py1091 except Exception:CODE
LOWintegrations/hermes/__init__.py1097 except Exception:CODE
LOWintegrations/hermes/__init__.py1745 except Exception as e:CODE
LOWintegrations/hermes/__init__.py1754 except Exception as e:CODE
LOWintegrations/hermes/__init__.py1763 except Exception:CODE
LOWintegrations/hermes/__init__.py1815 except Exception:CODE
LOWintegrations/hermes/__init__.py339 except Exception as e:CODE
LOWintegrations/hermes/__init__.py391 except Exception:CODE
LOWintegrations/hermes/__init__.py405 except Exception as e:CODE
LOWintegrations/hermes/__init__.py470 except Exception:CODE
LOWintegrations/hermes/__init__.py504 except Exception:CODE
261 more matches not shown…
Cross-File Repetition47 hits · 235 pts
SeverityFileLineSnippetContext
HIGHtests/conftest.py0create the shared semantic postgres engine once per test session.STRING
HIGHtest-int/conftest.py0create the shared semantic postgres engine once per test session.STRING
HIGHtest-int/semantic/conftest.py0create the shared semantic postgres engine once per test session.STRING
HIGHtests/mcp/conftest.py0create test client that both mcp and tests will use.STRING
HIGHtests/cli/conftest.py0create test client that both mcp and tests will use.STRING
HIGHtest-int/conftest.py0create test client that both mcp and tests will use.STRING
HIGHtests/cli/test_project_info_cloud_status.py0write config.json under a temporary home and return the file path.STRING
HIGHtests/cli/test_project_list_and_ls.py0write config.json under a temporary home and return the file path.STRING
HIGHtests/cli/test_json_output.py0write config.json under a temporary home and return the file path.STRING
HIGHtests/api/v2/test_knowledge_router.py0verify v2 project endpoints require project external_id uuid, not name.STRING
HIGHtests/api/v2/test_resource_router.py0verify v2 project endpoints require project external_id uuid, not name.STRING
HIGHtests/api/v2/test_project_router.py0verify v2 project endpoints require project external_id uuid, not name.STRING
HIGHtest-int/mcp/test_pagination_integration.py0parse a fastmcp tool result content block into json.STRING
HIGHtest-int/mcp/test_workspace_permalink_integration.py0parse a fastmcp tool result content block into json.STRING
HIGHtest-int/mcp/test_output_format_json_integration.py0parse a fastmcp tool result content block into json.STRING
HIGH…cp/test_observation_permalink_collision_integration.py0parse a fastmcp tool result content block into json.STRING
HIGHsrc/basic_memory/repository/relation_repository.py0initialize with project_id filter. args: project_id: project id to filter all operations bySTRING
HIGHsrc/basic_memory/repository/entity_repository.py0initialize with project_id filter. args: project_id: project id to filter all operations bySTRING
HIGHsrc/basic_memory/repository/observation_repository.py0initialize with project_id filter. args: project_id: project id to filter all operations bySTRING
HIGH…/basic_memory/repository/postgres_search_repository.py0create table if not exists search_vector_chunks ( id bigserial primary key, entity_id integer not null, project_id integSTRING
HIGHsrc/basic_memory/models/search.py0create table if not exists search_vector_chunks ( id bigserial primary key, entity_id integer not null, project_id integSTRING
HIGH…ions/h1b2c3d4e5f6_add_postgres_vector_search_tables.py0create table if not exists search_vector_chunks ( id bigserial primary key, entity_id integer not null, project_id integSTRING
HIGH…/basic_memory/repository/postgres_search_repository.py0create index if not exists idx_search_vector_chunks_project_entity on search_vector_chunks (project_id, entity_id)STRING
HIGHsrc/basic_memory/models/search.py0create 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.py0create index if not exists idx_search_vector_chunks_project_entity on search_vector_chunks (project_id, entity_id)STRING
HIGHsrc/basic_memory/mcp/container.py0create container by reading configmanager. this is the single point where api reads global config.STRING
HIGHsrc/basic_memory/cli/container.py0create container by reading configmanager. this is the single point where api reads global config.STRING
HIGHsrc/basic_memory/api/container.py0create container by reading configmanager. this is the single point where api reads global config.STRING
HIGHsrc/basic_memory/mcp/clients/memory.py0initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id (STRING
HIGHsrc/basic_memory/mcp/clients/resource.py0initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id (STRING
HIGHsrc/basic_memory/mcp/clients/search.py0initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id (STRING
HIGHsrc/basic_memory/mcp/clients/directory.py0initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id (STRING
HIGHsrc/basic_memory/mcp/clients/knowledge.py0initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id (STRING
HIGHsrc/basic_memory/mcp/clients/schema.py0initialize the schema client. args: http_client: httpx asyncclient for making requests project_id: project external_id (STRING
HIGHsrc/basic_memory/cli/commands/import_memory_json.py0get markdownprocessor and fileservice instances for importers.STRING
HIGHsrc/basic_memory/cli/commands/import_chatgpt.py0get markdownprocessor and fileservice instances for importers.STRING
HIGHsrc/basic_memory/cli/commands/import_claude_projects.py0get markdownprocessor and fileservice instances for importers.STRING
HIGH…sic_memory/cli/commands/import_claude_conversations.py0get markdownprocessor and fileservice instances for importers.STRING
HIGH…rsions/d7e8f9a0b1c2_add_structured_metadata_indexes.py0check if a column exists in a table (idempotent migration support).STRING
HIGH…rsions/j3d4e5f6g7h8_rename_entity_type_to_note_type.py0check if a column exists in a table (idempotent migration support).STRING
HIGH…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py0check if a column exists in a table (idempotent migration support).STRING
HIGH…g7h8i9_add_created_by_and_last_updated_by_to_entity.py0check if a column exists in a table (idempotent migration support).STRING
HIGH…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py0check if a column exists in a table (idempotent migration support).STRING
HIGH…rsions/d7e8f9a0b1c2_add_structured_metadata_indexes.py0check if an index exists (idempotent migration support).STRING
HIGH…rsions/j3d4e5f6g7h8_rename_entity_type_to_note_type.py0check if an index exists (idempotent migration support).STRING
HIGH…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py0check if an index exists (idempotent migration support).STRING
HIGH…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py0check if an index exists (idempotent migration support).STRING
Structural Annotation Overuse95 hits · 148 pts
SeverityFileLineSnippetContext
LOWtests/mcp/test_tool_write_note.py635 # Step 2: Create second note with different titleCOMMENT
LOWtests/mcp/test_tool_write_note.py643 # Step 3: Try to create/replace first note againCOMMENT
LOWtests/mcp/test_tool_write_note.py300 # Step 1: Create initial note (auto-generated permalink)COMMENT
LOWtests/mcp/test_tool_write_note.py321 # Step 2: Update with content that includes custom permalink in frontmatterCOMMENT
LOWtests/mcp/test_tool_write_note.py624 # Step 1: Create first noteCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py46 # Step 1: Create test projectCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py51 # Step 2: Create related entities that would cause foreign key constraint issuesCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py91 # Step 3: Attempt to remove the projectCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py106 # Step 4: Verify project was successfully removedCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py110 # Step 5: Verify related data was cascade deletedCOMMENT
LOWtests/services/test_project_removal_bug.py52 # Step 1: Add the test projectCOMMENT
LOWtests/services/test_project_removal_bug.py60 # Step 2: Create related entities for this projectCOMMENT
LOWtests/services/test_project_removal_bug.py76 # Step 3: Create observations for the entityCOMMENT
LOWtests/services/test_project_removal_bug.py81 # Step 4: Create relations involving the entityCOMMENT
LOWtests/services/test_project_removal_bug.py106 # Step 5: Attempt to remove the projectCOMMENT
LOWtests/services/test_project_removal_bug.py110 # Step 6: Verify everything was properly deletedCOMMENT
LOWtests/services/test_entity_service.py2305 # Step 1: Create first entity "Node A"STRING
LOWtests/services/test_entity_service.py2329 # Step 2: Create Node B to match live test scenarioSTRING
LOWtests/services/test_entity_service.py2341 # Step 3: Create Node C - this is where the bug occurs in live testingSTRING
LOW.agents/skills/instrumentation/SKILL.md24## Step 1: Detect Language and FrameworksCOMMENT
LOW.claude/commands/release/changelog.md18### Step 1: Version AnalysisCOMMENT
LOW.claude/commands/release/changelog.md34### Step 2: Categorize ChangesCOMMENT
LOW.claude/commands/release/changelog.md59### Step 3: Generate Changelog EntryCOMMENT
LOW.claude/commands/release/changelog.md104### Step 4: IntegrationCOMMENT
LOW.claude/commands/release/release-check.md17### Step 1: Environment ValidationCOMMENT
LOW.claude/commands/release/release-check.md28### Step 2: Code Quality GatesCOMMENT
LOW.claude/commands/release/release-check.md46### Step 3: Documentation ValidationCOMMENT
LOW.claude/commands/release/release-check.md57### Step 4: Dependency ValidationCOMMENT
LOW.claude/commands/release/release-check.md68### Step 5: Issue Tracking ValidationCOMMENT
LOW.claude/commands/release/release.md17### Step 1: Pre-flight ValidationCOMMENT
LOW.claude/commands/release/release.md38### Step 2: Use Justfile AutomationCOMMENT
LOW.claude/commands/release/release.md64### Step 3: Monitor Release ProcessCOMMENT
LOW.claude/commands/release/release.md72### Step 4: Post-Release ValidationCOMMENT
LOW.claude/commands/release/beta.md17### Step 1: Pre-flight ValidationCOMMENT
LOW.claude/commands/release/beta.md23### Step 2: Use Justfile AutomationCOMMENT
LOW.claude/commands/release/beta.md39### Step 3: Monitor Beta ReleaseCOMMENT
LOW.claude/commands/release/beta.md45### Step 4: Beta Testing InstructionsCOMMENT
LOWdocs/cloud-cli.md155# Step 1: Preview the initial sync (recommended)COMMENT
LOWdocs/cloud-cli.md158# Step 2: If all looks good, run the actual syncCOMMENT
LOWtest-int/mcp/test_chatgpt_tools_integration.py430 # Step 1: Create multiple documentsCOMMENT
LOWtest-int/mcp/test_chatgpt_tools_integration.py466 # Step 2: Search for API-related content (as ChatGPT would)COMMENT
LOWtest-int/mcp/test_chatgpt_tools_integration.py477 # Step 3: Fetch one of the search results (as ChatGPT would)COMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py24 # Step 1: Create a second project that we can switch toCOMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py37 # Step 2: Test that note operations work in the new project contextCOMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py52 # Step 3: Test that we can read the note we just createdCOMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py60 # Step 4: Test that edit operations work (this was failing in the original issue)COMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py76 # Step 5: Verify the edit was appliedCOMMENT
LOWbenchmarks/docs/benchmarks.md235### Step 1: Create BM worktrees for target refsCOMMENT
LOWbenchmarks/docs/benchmarks.md250### Step 2: Prepare benchmark datasets onceCOMMENT
LOWbenchmarks/docs/benchmarks.md259### Step 3: Run BM for each revision with deterministic run IDsCOMMENT
LOWbenchmarks/docs/benchmarks.md302### Step 4: Run mem0 anchor once per dataset (optional but recommended)COMMENT
LOWbenchmarks/docs/benchmarks.md330### Step 5: Compare runsCOMMENT
LOWbenchmarks/docs/benchmarks.md348### Step 6: Record matrix resultsCOMMENT
LOWskills/memory-ingest/SKILL.md30## Step 1: Parse Raw InputCOMMENT
LOWskills/memory-ingest/SKILL.md41## Step 2: Extract EntitiesCOMMENT
LOWskills/memory-ingest/SKILL.md59## Step 3: Search Existing EntitiesCOMMENT
LOWskills/memory-ingest/SKILL.md81## Step 4: Research New Entities (Optional)COMMENT
LOWskills/memory-ingest/SKILL.md93## Step 5: Present Entity ProposalCOMMENT
LOWskills/memory-ingest/SKILL.md112## Step 6: Create the Source NoteCOMMENT
LOWskills/memory-ingest/SKILL.md195## Step 7: Create Approved EntitiesSTRING
35 more matches not shown…
Cross-Language Confusion22 hits · 122 pts
SeverityFileLineSnippetContext
HIGHtests/test_config.py1282 "json": "jq . {file} > {file}.tmp && mv {file}.tmp {file}",CODE
HIGHtests/importers/test_conversation_indexing.py131 ), f"Search permalink should not be null, got: {search_result.permalink}"CODE
HIGHtests/utils/test_file_utils.py27# Skip marker for tests that use Unix-specific commands (cat, sh, sleep, /dev/null)COMMENT
HIGHtests/utils/test_parse_tags.py23 # None entries (e.g. YAML `tags: [alpha, null]`) are skipped, not revived as "None"COMMENT
HIGHtests/mcp/test_tool_edit_note.py623 # Call edit_note with explicit None for all optional fields (simulates MCP null)COMMENT
HIGHtests/mcp/test_async_client_modes.py478 '{"access_token":"oauth-token-456","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}',CODE
HIGHtests/mcp/test_async_client_modes.py542 '{"access_token":"oauth-control-123","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}',CODE
HIGHtests/cli/cloud/test_cloud_api_client_and_utils.py29 '{"access_token":"token-123","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}',CODE
HIGHtests/cli/cloud/test_cloud_api_client_and_utils.py62 '{"access_token":"token-123","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}',CODE
HIGHtests/cli/cloud/test_cloud_api_client_and_utils.py108 '{"access_token":"token-123","refresh_token":null,"expires_at":9999999999,"token_type":"Bearer"}',CODE
HIGHtests/cli/cloud/test_cloud_api_client_and_utils.py316 '{"access_token":"oauth-token-456","refresh_token":null,'CODE
HIGH…nchmarks/src/basic_memory_benchmarks/scoring/review.py139 if (labels[id] === undefined) delete labels[id];CODE
HIGH…nchmarks/src/basic_memory_benchmarks/scoring/review.py154 if (ok && fl) ok = (fl==="unlabeled") ? !lab : (lab===fl);CODE
HIGH…nchmarks/src/basic_memory_benchmarks/scoring/review.py170 human_label: labels[c.query_id + "__" + c.provider] || null,CODE
HIGH…nchmarks/src/basic_memory_benchmarks/scoring/review.py172 const blob = new Blob([JSON.stringify({{run: RUN, labels: out}}, null, 1)], {{type: "application/json"}});CODE
HIGHsrc/basic_memory/utils.py534 # Skip None entries (e.g. a YAML `tags: [alpha, null]`) so they are not revived asCOMMENT
HIGHsrc/basic_memory/markdown/plugins.py21 # if it's a markdown_task, return falseCOMMENT
HIGHsrc/basic_memory/api/v2/routers/knowledge_router.py154 Only includes resolved relations (where to_id is not null).STRING
HIGHsrc/basic_memory/api/v2/routers/knowledge_router.py176 # Fetch all resolved relations (to_id is not null) with eager-loaded entitiesCOMMENT
HIGH…basic_memory/indexing/accepted_note_mutation_runner.py88 (checksum null). Keep the message text and key names stable (issue #1445).STRING
HIGHsrc/basic_memory/services/context_service.py546 ELSE eg.entity_path || e.id::text || ','CODE
HIGHsrc/basic_memory/services/context_service.py706 eg.entity_path || e.id || ',' as entity_pathCODE
Deep Nesting116 hits · 100 pts
SeverityFileLineSnippetContext
LOWplugins/codex/hooks/pre-compact.py55CODE
LOWplugins/codex/hooks/pre-compact.py69CODE
LOWtests/cli/test_ignore_utils.py97CODE
LOWtests/services/test_project_service.py101CODE
LOWtests/services/test_project_service.py260CODE
LOWtests/services/test_project_service.py370CODE
LOWtests/services/test_project_service.py650CODE
LOWtests/services/test_project_service.py843CODE
LOWtests/services/test_project_service.py1633CODE
LOWtests/services/test_project_removal_bug.py34CODE
LOWintegrations/hermes/__init__.py418CODE
LOWintegrations/hermes/__init__.py478CODE
LOWintegrations/hermes/__init__.py703CODE
LOWintegrations/hermes/__init__.py1441CODE
LOWintegrations/hermes/__init__.py1731CODE
LOWintegrations/hermes/__init__.py1514CODE
LOWtest-int/test_search_performance_benchmark.py433CODE
LOWtest-int/compare_search_benchmarks.py60CODE
LOWbenchmarks/src/basic_memory_benchmarks/runner.py89CODE
LOWbenchmarks/src/basic_memory_benchmarks/cli.py50CODE
LOW…basic_memory_benchmarks/providers/supermemory_local.py82CODE
LOW…marks/src/basic_memory_benchmarks/datasets/convomem.py84CODE
LOW…basic_memory_benchmarks/converters/locomo_to_corpus.py37CODE
LOW…sic_memory_benchmarks/converters/convomem_to_corpus.py55CODE
LOWsrc/basic_memory/config.py622CODE
LOWsrc/basic_memory/config.py960CODE
LOWsrc/basic_memory/utils.py75CODE
LOWsrc/basic_memory/utils.py511CODE
LOWsrc/basic_memory/utils.py603CODE
LOWsrc/basic_memory/ignore_utils.py156CODE
LOWsrc/basic_memory/ignore_utils.py188CODE
LOWsrc/basic_memory/ignore_utils.py223CODE
LOWsrc/basic_memory/repository/metadata_filters.py62CODE
LOWsrc/basic_memory/repository/sqlite_search_repository.py158CODE
LOWsrc/basic_memory/repository/sqlite_search_repository.py241CODE
LOWsrc/basic_memory/repository/sqlite_search_repository.py751CODE
LOW…/basic_memory/repository/postgres_search_repository.py716CODE
LOW…/basic_memory/repository/embedding_provider_factory.py118CODE
LOWsrc/basic_memory/repository/search_repository_base.py871CODE
LOW…asic_memory/importers/claude_conversations_importer.py139CODE
LOWsrc/basic_memory/importers/claude_projects_importer.py30CODE
LOWsrc/basic_memory/importers/project_zip_import.py51CODE
LOWsrc/basic_memory/importers/memory_json_importer.py30CODE
LOWsrc/basic_memory/markdown/plugins.py152CODE
LOWsrc/basic_memory/markdown/plugins.py235CODE
LOWsrc/basic_memory/markdown/plugins.py247CODE
LOWsrc/basic_memory/markdown/entity_parser.py129CODE
LOWsrc/basic_memory/runtime/process.py17CODE
LOWsrc/basic_memory/mcp/project_context.py121CODE
LOWsrc/basic_memory/mcp/project_context.py262CODE
LOWsrc/basic_memory/mcp/project_context.py1075CODE
LOWsrc/basic_memory/mcp/project_context.py1125CODE
LOWsrc/basic_memory/mcp/project_context.py1275CODE
LOWsrc/basic_memory/mcp/project_context.py1538CODE
LOWsrc/basic_memory/mcp/tools/edit_note.py328CODE
LOWsrc/basic_memory/mcp/tools/delete_note.py195CODE
LOWsrc/basic_memory/mcp/tools/utils.py77CODE
LOWsrc/basic_memory/mcp/tools/write_note.py69CODE
LOWsrc/basic_memory/mcp/tools/search.py627CODE
LOWsrc/basic_memory/mcp/tools/read_note.py89CODE
56 more matches not shown…
Redundant / Tautological Comments69 hits · 100 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py266 # Set BASIC_MEMORY_HOME to the test directoryCOMMENT
LOWtests/conftest.py781 # Write fileCOMMENT
LOWtests/test_config.py568 # Set default to a project that exists with exact name matchCOMMENT
LOWtests/test_production_cascade_delete.py118 # Check if CASCADE DELETE is configuredCOMMENT
LOWtests/test_production_cascade_delete.py232 # Check if entity was cascade deletedCOMMENT
LOWtests/test_production_cascade_delete.py252 # Check if it's a foreign key constraint errorCOMMENT
LOWtests/test_production_cascade_delete.py306 # Check if foreign keys are enabledCOMMENT
LOWtests/markdown/test_markdown_processor.py40 # Write fileCOMMENT
LOWtests/markdown/test_markdown_processor.py89 # Write fileCOMMENT
LOWtests/utils/test_utf8_handling.py47 # Read the file back and verify contentSTRING
LOWtests/utils/test_utf8_handling.py83 # Write the fileSTRING
LOWtests/utils/test_utf8_handling.py138 # Write the fileSTRING
LOWtests/mcp/test_obsidian_yaml_formatting.py24 # Read the file directly to check YAML formattingCOMMENT
LOWtests/mcp/test_obsidian_yaml_formatting.py55 # Read the file to check formattingCOMMENT
LOWtests/mcp/test_tool_write_note.py1398 # Set config to allow overwrites by defaultCOMMENT
LOWtests/mcp/test_tool_write_note.py491 # Write the file backSTRING
LOWtests/cli/test_project_set_cloud_local.py219 # Set back to local — supply --local-path; existing config path is preservedCOMMENT
LOWtests/cli/test_project_add_with_local_path.py67 # Set HOME to tmp_path so ConfigManager uses our test configCOMMENT
LOWtests/services/test_project_removal_bug.py130 # Check if this is the specific foreign key constraint error from the bug reportCOMMENT
LOWtests/services/test_file_service.py53 # Write file and get checksumCOMMENT
LOWtests/services/test_file_service.py206 # Write fileCOMMENT
LOWtest-int/conftest.py373 # Set BASIC_MEMORY_HOME to the test directoryCOMMENT
LOWtest-int/semantic/test_search_diagnostics.py229 # Check if the database entity outranks irrelevant observationsCOMMENT
LOWtest-int/semantic/test_search_diagnostics.py466 # Check if bullets have any context (they shouldn't in current impl)COMMENT
LOWsrc/basic_memory/db.py117 # Check if Postgres backend is configured (for backward compatibility)COMMENT
LOWsrc/basic_memory/config.py647 # Check if already in new format — peek at first valueCOMMENT
LOWsrc/basic_memory/config.py1012 # Check if projects dict uses old string-value formatCOMMENT
LOWsrc/basic_memory/config.py1019 # Check if any project has local_sync_path set but path is a cloud slugCOMMENT
LOWsrc/basic_memory/utils.py44 # Check if this is a Windows absolute path (e.g., C:\Users\...)COMMENT
LOWsrc/basic_memory/utils.py119 # Check if we have CJK characters that should be preservedCOMMENT
LOWsrc/basic_memory/utils.py546 # Check if it's a JSON array string (common issue from AI assistants)COMMENT
LOWsrc/basic_memory/ignore_utils.py249 # Check if the first part of the path matches the directory nameSTRING
LOWsrc/basic_memory/ignore_utils.py261 # Check if any path part matches the directory nameSTRING
LOWsrc/basic_memory/ignore_utils.py270 # Check if any individual path part matches the glob patternSTRING
LOWsrc/basic_memory/repository/sqlite_search_repository.py256 # Check if term is already a proper wildcard pattern (alphanumeric + *)COMMENT
LOWsrc/basic_memory/repository/sqlite_search_repository.py304 # Check if term needs quotingCOMMENT
LOWsrc/basic_memory/repository/sqlite_search_repository.py311 # Check if any individual word contains special characters that need quotingCOMMENT
LOWsrc/basic_memory/repository/entity_repository.py433 # Check if this is a FOREIGN KEY constraint failureCOMMENT
LOWsrc/basic_memory/repository/entity_repository.py618 # Check if this is a FOREIGN KEY constraint failureCOMMENT
LOW…/basic_memory/repository/postgres_search_repository.py233 # Check if term is already a wildcard patternCOMMENT
LOWsrc/basic_memory/repository/search_repository_base.py785 # Check if this paragraph contains bullet itemsCOMMENT
LOWsrc/basic_memory/repository/repository.py41 # Check if this model has a project_id columnCOMMENT
LOW…asic_memory/importers/claude_conversations_importer.py77 # Write file using relative path - FileService handles base_pathCOMMENT
LOWsrc/basic_memory/importers/memory_json_importer.py112 # Write file using relative path - FileService handles base_pathCOMMENT
LOWsrc/basic_memory/importers/chatgpt_importer.py67 # Write file using relative path - FileService handles base_pathCOMMENT
LOWsrc/basic_memory/importers/chatgpt_importer.py245 # Add children to stack in reverse order to maintain conversation flowCOMMENT
LOWsrc/basic_memory/markdown/entity_parser.py190 # Check if the path is already absoluteCOMMENT
LOWsrc/basic_memory/mcp/tools/view_note.py74 # Check if this is an error message (note not found)COMMENT
LOWsrc/basic_memory/mcp/tools/search.py1148 # Check if we got no results and provide helpful guidanceCOMMENT
LOWsrc/basic_memory/mcp/tools/move_note.py281# Check if note exists in Basic MemoryCOMMENT
LOWsrc/basic_memory/mcp/tools/move_note.py904 # Check if extensions matchSTRING
LOWsrc/basic_memory/cli/commands/db.py355 # Check if it's a cloud-only project — those can't be reindexed locallyCOMMENT
LOWsrc/basic_memory/cli/commands/format.py92 # Check if formatting is enabledCOMMENT
LOWsrc/basic_memory/cli/commands/cloud/upload.py45 # Check if path existsCOMMENT
LOWsrc/basic_memory/cli/commands/cloud/upload.py113 # Read file content asynchronouslyCOMMENT
LOWsrc/basic_memory/cli/commands/cloud/upload.py233 # Check if file should be ignoredCOMMENT
LOWsrc/basic_memory/cli/commands/cloud/upload_command.py89 # Check if project existsCOMMENT
LOWsrc/basic_memory/cli/commands/cloud/rclone_commands.py665 # Check if first run requires resyncCOMMENT
LOWsrc/basic_memory/api/v2/routers/project_router.py162 # Check if project already exists before attempting to addCOMMENT
LOWsrc/basic_memory/api/v2/routers/project_router.py524 # Check if trying to delete the default projectCOMMENT
9 more matches not shown…
Verbosity Indicators55 hits · 90 pts
SeverityFileLineSnippetContext
LOWtests/mcp/test_tool_write_note.py635 # Step 2: Create second note with different titleCOMMENT
LOWtests/mcp/test_tool_write_note.py643 # Step 3: Try to create/replace first note againCOMMENT
LOWtests/mcp/test_tool_write_note.py300 # Step 1: Create initial note (auto-generated permalink)COMMENT
LOWtests/mcp/test_tool_write_note.py321 # Step 2: Update with content that includes custom permalink in frontmatterCOMMENT
LOWtests/mcp/test_tool_write_note.py624 # Step 1: Create first noteCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py46 # Step 1: Create test projectCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py51 # Step 2: Create related entities that would cause foreign key constraint issuesCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py91 # Step 3: Attempt to remove the projectCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py106 # Step 4: Verify project was successfully removedCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py110 # Step 5: Verify related data was cascade deletedCOMMENT
LOWtests/services/test_project_removal_bug.py52 # Step 1: Add the test projectCOMMENT
LOWtests/services/test_project_removal_bug.py60 # Step 2: Create related entities for this projectCOMMENT
LOWtests/services/test_project_removal_bug.py76 # Step 3: Create observations for the entityCOMMENT
LOWtests/services/test_project_removal_bug.py81 # Step 4: Create relations involving the entityCOMMENT
LOWtests/services/test_project_removal_bug.py106 # Step 5: Attempt to remove the projectCOMMENT
LOWtests/services/test_project_removal_bug.py110 # Step 6: Verify everything was properly deletedCOMMENT
LOWtests/services/test_entity_service.py2305 # Step 1: Create first entity "Node A"STRING
LOWtests/services/test_entity_service.py2329 # Step 2: Create Node B to match live test scenarioSTRING
LOWtests/services/test_entity_service.py2341 # Step 3: Create Node C - this is where the bug occurs in live testingSTRING
LOWtest-int/mcp/test_chatgpt_tools_integration.py430 # Step 1: Create multiple documentsCOMMENT
LOWtest-int/mcp/test_chatgpt_tools_integration.py466 # Step 2: Search for API-related content (as ChatGPT would)COMMENT
LOWtest-int/mcp/test_chatgpt_tools_integration.py477 # Step 3: Fetch one of the search results (as ChatGPT would)COMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py24 # Step 1: Create a second project that we can switch toCOMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py37 # Step 2: Test that note operations work in the new project contextCOMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py52 # Step 3: Test that we can read the note we just createdCOMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py60 # Step 4: Test that edit operations work (this was failing in the original issue)COMMENT
LOWtest-int/mcp/test_project_state_sync_integration.py76 # Step 5: Verify the edit was appliedCOMMENT
LOWsrc/basic_memory/mcp/project_context.py1586 # Step 1: Resolve project name from config (no network call)COMMENT
LOWsrc/basic_memory/mcp/project_context.py1617 # Step 2: Check explicit routing BEFORE workspace resolutionCOMMENT
LOWsrc/basic_memory/mcp/project_context.py1635 # Step 3: Determine if cloud routing is neededCOMMENT
LOWsrc/basic_memory/mcp/project_context.py1746 # Step 4: Local routing (default)COMMENT
LOWsrc/basic_memory/cli/auth.py272 # Step 1: Request device authorizationCOMMENT
LOWsrc/basic_memory/cli/auth.py277 # Step 2: Display user instructionsCOMMENT
LOWsrc/basic_memory/cli/auth.py280 # Step 3: Poll for tokenCOMMENT
LOWsrc/basic_memory/cli/auth.py288 # Step 4: Save tokensCOMMENT
LOWsrc/basic_memory/cli/commands/cloud/core_commands.py231 # Step 1: Install rcloneCOMMENT
LOWsrc/basic_memory/cli/commands/cloud/core_commands.py262 # Step 2: Get tenant info (scoped to the target workspace when given)COMMENT
LOWsrc/basic_memory/cli/commands/cloud/core_commands.py267 # Step 3: Generate credentials for that tenant's bucketCOMMENT
LOWsrc/basic_memory/cli/commands/cloud/core_commands.py272 # Step 4: Configure the tenant's rclone remoteCOMMENT
LOW…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py76 # Step 1: Add external_id column as nullable firstCOMMENT
LOW…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py79 # Step 2: Generate UUIDs for existing rowsCOMMENT
LOW…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py97 # Step 3: Make external_id NOT NULLSTRING
LOW…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py105 # Step 4: Create unique index on project.external_id (idempotent)STRING
LOW…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py114 # Step 1: Add external_id column as nullable firstSTRING
LOW…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py117 # Step 2: Generate UUIDs for existing rowsSTRING
LOW…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py135 # Step 3: Make external_id NOT NULLSTRING
LOW…/g9a0b3c4d5e6_add_external_id_to_project_and_entity.py143 # Step 4: Create unique index on entity.external_id (idempotent)STRING
LOW…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py75 # Step 1: Add project_id column as nullable first (idempotent)COMMENT
LOW…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py79 # Step 2: Backfill project_id from entity.project_id via from_idCOMMENT
LOW…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py98 # Step 3: Make project_id NOT NULL and add foreign keySTRING
LOW…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py119 # Step 4: Create index on relation.project_id (idempotent)STRING
LOW…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py127 # Step 1: Add project_id column as nullable first (idempotent)STRING
LOW…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py131 # Step 2: Backfill project_id from entity.project_id via entity_idSTRING
LOW…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py150 # Step 3: Make project_id NOT NULL and add foreign keySTRING
LOW…/f8a9b2c3d4e5_add_pg_trgm_for_fuzzy_link_resolution.py171 # Step 4: Create index on observation.project_id (idempotent)STRING
Modern Structural Boilerplate53 hits · 56 pts
SeverityFileLineSnippetContext
LOWtests/test_alembic_env.py23 def set_main_option(self, name: str, value: str) -> None:CODE
LOWtests/mcp/test_client_info.py25 async def set_state(self, key: str, value: object) -> None:CODE
LOWtests/mcp/conftest.py32 async def set_state(self, key: str, value: object, **kwargs) -> None:CODE
LOWtests/mcp/test_tool_telemetry.py21 def set_attributes(self, attrs: dict) -> None:CODE
LOWtests/mcp/test_tool_telemetry.py24 def set_attribute(self, key: str, value) -> None:CODE
LOWtests/mcp/test_client_telemetry.py26 def set_attribute(self, key: str, value) -> None:CODE
LOWtests/mcp/test_client_telemetry.py29 def set_attributes(self, new_attrs: dict) -> None:CODE
LOWbenchmarks/src/basic_memory_benchmarks/__init__.py5__all__ = ["main"]CODE
LOWbenchmarks/src/basic_memory_benchmarks/llm/__init__.py12__all__ = [CODE
LOWscripts/update_versions.py80def set_server_version(data: dict[str, Any], version: str) -> None:CODE
LOWscripts/update_versions.py87def set_claude_marketplace_version(data: dict[str, Any], version: str) -> None:CODE
LOWscripts/update_versions.py95def set_package_version(data: dict[str, Any], version: str) -> None:CODE
LOWscripts/update_versions.py107def _update_core(version: str, *, dry_run: bool) -> None:CODE
LOWscripts/update_versions.py121def _update_packages(version: str, *, dry_run: bool) -> None:CODE
LOWscripts/update_versions.py161def update_versions(raw_version: str, *, scope: str = "all", dry_run: bool) -> None:CODE
LOWsrc/basic_memory/config.py777 def set_project_mode(self, project_name: str, mode: ProjectMode) -> None:CODE
LOWsrc/basic_memory/config.py1142 def set_default_project(self, name: str) -> None:CODE
LOWsrc/basic_memory/telemetry.py64__all__ = ["configure_telemetry", "get_logfire_handler"]CODE
LOWsrc/basic_memory/project_resolver.py117__all__ = [CODE
LOWsrc/basic_memory/repository/__init__.py11__all__ = [CODE
LOWsrc/basic_memory/repository/search_repository.py161__all__ = [CODE
LOWsrc/basic_memory/repository/repository.py44 def _set_project_id_if_needed(self, model: T) -> None:CODE
LOW…asic_memory/importers/claude_conversations_importer.py12logger = logging.getLogger(__name__)CODE
LOWsrc/basic_memory/importers/claude_projects_importer.py11logger = logging.getLogger(__name__)CODE
LOWsrc/basic_memory/importers/__init__.py23__all__ = [CODE
LOWsrc/basic_memory/importers/memory_json_importer.py10logger = logging.getLogger(__name__)CODE
LOWsrc/basic_memory/importers/base.py16logger = logging.getLogger(__name__)CODE
LOWsrc/basic_memory/importers/chatgpt_importer.py12logger = logging.getLogger(__name__)CODE
LOWsrc/basic_memory/markdown/__init__.py13__all__ = [CODE
LOWsrc/basic_memory/mcp/container.py104def set_container(container: McpContainer) -> None:CODE
LOWsrc/basic_memory/mcp/async_client.py337def set_client_factory(factory: Callable[..., AbstractAsyncContextManager[AsyncClient]]) -> None:CODE
LOWsrc/basic_memory/mcp/project_context.py115def set_workspace_provider(provider: Callable[[], Awaitable[list[WorkspaceInfo]]]) -> None:CODE
LOWsrc/basic_memory/mcp/clients/__init__.py22__all__ = [CODE
LOWsrc/basic_memory/mcp/ui/__init__.py5__all__ = ["get_ui_variant", "load_html", "load_variant_html"]CODE
LOWsrc/basic_memory/mcp/tools/__init__.py39__all__ = [CODE
LOWsrc/basic_memory/mcp/resources/__init__.py17__all__ = [CODE
LOWsrc/basic_memory/mcp/prompts/__init__.py14__all__ = [CODE
LOWsrc/basic_memory/models/__init__.py8__all__ = [CODE
LOWsrc/basic_memory/cli/container.py68def set_container(container: CliContainer) -> None:CODE
LOWsrc/basic_memory/cli/commands/__init__.py16__all__ = [CODE
LOWsrc/basic_memory/schemas/__init__.py59__all__ = [CODE
LOWsrc/basic_memory/schemas/v2/__init__.py30__all__ = [CODE
LOWsrc/basic_memory/schema/__init__.py34__all__ = [CODE
LOWsrc/basic_memory/cloud/__init__.py32__all__ = [CODE
LOWsrc/basic_memory/api/__init__.py5__all__ = ["app"]CODE
LOWsrc/basic_memory/api/container.py132def set_container(container: ApiContainer) -> None:CODE
LOWsrc/basic_memory/api/v2/__init__.py26__all__ = [CODE
LOWsrc/basic_memory/api/v2/routers/__init__.py13__all__ = [CODE
LOWsrc/basic_memory/api/v2/routers/importer_router.py26logger = logging.getLogger(__name__)CODE
LOWsrc/basic_memory/deps/__init__.py181__all__ = [CODE
LOWsrc/basic_memory/services/project_service.py374 async def set_default_project(self, name: str) -> None:CODE
LOWsrc/basic_memory/services/directory_service.py17logger = logging.getLogger(__name__)CODE
LOWsrc/basic_memory/services/__init__.py8__all__ = ["BaseService", "FileService", "EntityService", "ProjectService"]CODE
AI Structural Patterns38 hits · 34 pts
SeverityFileLineSnippetContext
LOWtests/repository/test_hybrid_fusion.py65CODE
LOWtests/repository/test_vector_pagination.py50CODE
LOWtests/repository/test_vector_threshold.py54CODE
LOWtests/repository/test_semantic_search_base.py77CODE
LOWbenchmarks/src/basic_memory_benchmarks/cli.py209CODE
LOWbenchmarks/src/basic_memory_benchmarks/cli.py372CODE
LOWsrc/basic_memory/repository/sqlite_search_repository.py751CODE
LOWsrc/basic_memory/repository/sqlite_search_repository.py965CODE
LOWsrc/basic_memory/repository/sqlite_search_repository.py1118CODE
LOW…/basic_memory/repository/postgres_search_repository.py211CODE
LOW…/basic_memory/repository/postgres_search_repository.py716CODE
LOW…/basic_memory/repository/postgres_search_repository.py913CODE
LOW…/basic_memory/repository/postgres_search_repository.py1077CODE
LOWsrc/basic_memory/repository/search_repository.py36CODE
LOWsrc/basic_memory/repository/search_repository.py57CODE
LOWsrc/basic_memory/repository/search_repository_base.py261CODE
LOWsrc/basic_memory/repository/search_repository_base.py302CODE
LOWsrc/basic_memory/repository/litellm_provider.py88CODE
LOWsrc/basic_memory/repository/repository.py396CODE
LOWsrc/basic_memory/mcp/tools/edit_note.py328CODE
LOWsrc/basic_memory/mcp/tools/ui_sdk.py32CODE
LOWsrc/basic_memory/mcp/tools/utils.py191CODE
LOWsrc/basic_memory/mcp/tools/utils.py283CODE
LOWsrc/basic_memory/mcp/tools/utils.py388CODE
LOWsrc/basic_memory/mcp/tools/utils.py497CODE
LOWsrc/basic_memory/mcp/tools/utils.py634CODE
LOWsrc/basic_memory/mcp/tools/write_note.py69CODE
LOWsrc/basic_memory/mcp/tools/search.py627CODE
LOWsrc/basic_memory/mcp/tools/recent_activity.py48CODE
LOWsrc/basic_memory/mcp/tools/build_context.py149CODE
LOWsrc/basic_memory/cli/commands/ci.py49CODE
LOWsrc/basic_memory/cli/commands/tool.py60CODE
LOWsrc/basic_memory/cli/commands/tool.py388CODE
LOWsrc/basic_memory/cli/commands/tool.py452CODE
LOWsrc/basic_memory/cli/commands/tool.py517CODE
LOWsrc/basic_memory/cli/commands/project.py717CODE
LOWsrc/basic_memory/cli/commands/cloud/rclone_commands.py582CODE
LOWsrc/basic_memory/services/context_service.py110CODE
Fake / Example Data29 hits · 34 pts
SeverityFileLineSnippetContext
LOWtests/utils/test_frontmatter_obsidian_compatible.py110 post.metadata["authors"] = ["John Doe", "Jane Smith"]CODE
LOWtests/mcp/test_project_context.py722 name="Acme Corp",CODE
LOWtests/mcp/test_tool_project_management.py914 cloud_workspace_name="Acme Corp",CODE
LOWtests/mcp/test_tool_project_management.py925 assert merged[0]["workspace_name"] == "Acme Corp"CODE
LOWtests/schema/test_diff.py143 notes[0] = _note("n0", observations=[Obs("name", "P0"), Obs("fax", "555-1234")])CODE
LOWtests/schema/test_validator.py137 result = validate_note("test-note", schema, [], [Rel("works_at", "Acme Corp")])CODE
LOWtests/schema/test_validator.py141 assert result.field_results[0].values == ["Acme Corp"]CODE
LOWtests/schema/test_validator.py235 relations = [Rel("works_at", "Acme Corp"), Rel("friends_with", "Bob")]CODE
LOWdocs/ai-assistant-guide-extended.md676 "email": "user@example.com",CODE
LOWintegrations/openclaw/openclaw.plugin.json38 "placeholder": "my-agent",CODE
LOWintegrations/openclaw/openclaw.plugin.json43 "placeholder": "memory/",CODE
LOWintegrations/openclaw/openclaw.plugin.json48 "placeholder": "MEMORY.md",CODE
LOWintegrations/openclaw/openclaw.plugin.json53 "placeholder": "bm",CODE
LOWintegrations/openclaw/openclaw.plugin.json63 "placeholder": "10",CODE
LOWintegrations/openclaw/openclaw.plugin.json73 "placeholder": "Check for active tasks and recent activity...",CODE
LOWintegrations/openclaw/openclaw.plugin.json84 "placeholder": ".",CODE
LOWintegrations/openclaw/tools/list-workspaces.test.ts63 name: "Acme Corp",CODE
LOWintegrations/openclaw/tools/list-workspaces.test.ts93 name: "Acme Corp",CODE
LOWtest-int/mcp/test_param_aliases_integration.py148 "find_text": "placeholder",CODE
LOWtest-int/mcp/test_read_content_integration.py302This is section {i + 1} with substantial content. Lorem ipsum dolor sit amet,CODE
LOWtest-int/mcp/test_read_content_integration.py302This is section {i + 1} with substantial content. Lorem ipsum dolor sit amet,CODE
LOWtest-int/mcp/test_read_content_integration.py341 assert "Lorem ipsum" in contentSTRING
LOWtest-int/mcp/test_long_relation_type_integration.py30 "**Lorem ipsum dolor sit amet** — consectetur adipiscing elit, sed do eiusmod "CODE
LOWtest-int/mcp/test_long_relation_type_integration.py30 "**Lorem ipsum dolor sit amet** — consectetur adipiscing elit, sed do eiusmod "CODE
LOWskills/memory-research/SKILL.md50search_notes(query="Acme Corp")CODE
LOWskills/memory-research/SKILL.md122 title="Acme Corp",CODE
LOWskills/memory-research/SKILL.md217 identifier="Acme Corp",CODE
LOW…c/basic_memory/mcp/ui/html/search-results-tool-ui.html20`).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
LOWsrc/basic_memory/mcp/ui/html/note-preview-tool-ui.html20`).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
Over-Commented Block32 hits · 31 pts
SeverityFileLineSnippetContext
LOWdocker-compose-postgres.yml1# Docker Compose configuration for Basic Memory with PostgreSQLCOMMENT
LOWdocker-compose-postgres.yml41COMMENT
LOWdocker-compose.yml61 interval: 30sCOMMENT
LOWdocker-compose.yml81COMMENT
LOWplugins/claude-code/hooks/pre-compact.sh1#!/usr/bin/env bashCOMMENT
LOWplugins/claude-code/hooks/session-start.sh1#!/usr/bin/env bashCOMMENT
LOWtests/markdown/test_entity_parser.py261#COMMENT
LOWtests/mcp/test_tool_resource.py241# Skip testing the large document size handling since it would requireCOMMENT
LOWtests/db/test_issue_254_foreign_key_constraints.py161 # Document the current error for trackingCOMMENT
LOWdocs/ai-assistant-guide-extended.md101# "note_count": 156,COMMENT
LOWintegrations/hermes/__init__.py1701# PluginManager reach-in — workaround for Hermes's memory-provider collectorCOMMENT
LOWintegrations/hermes/.github/workflows/release.yml1name: releaseCOMMENT
LOW.github/workflows/claude.yml61 additional_permissions: |COMMENT
LOWsrc/basic_memory/db.py21)COMMENT
LOWsrc/basic_memory/db.py581 # Trigger: run_migrations() created a temporary engine while module-levelCOMMENT
LOWsrc/basic_memory/config.py841COMMENT
LOWsrc/basic_memory/repository/sqlite_search_repository.py821COMMENT
LOWsrc/basic_memory/repository/project_repository.py221COMMENT
LOWsrc/basic_memory/repository/note_content_repository.py221 )COMMENT
LOWsrc/basic_memory/repository/fastembed_provider.py241 # filesystem check positively confirms a corrupt cache subdir (theCOMMENT
LOWsrc/basic_memory/mcp/tools/search.py901 # Validate pagination arguments before they reach the API/repository layer.COMMENT
LOWsrc/basic_memory/mcp/tools/search.py921 note_types = parse_str_list(note_types) if note_types is not None else []COMMENT
LOWsrc/basic_memory/mcp/tools/search.py1101 return (COMMENT
LOWsrc/basic_memory/mcp/tools/read_note.py301 ]COMMENT
LOWsrc/basic_memory/mcp/tools/move_note.py661COMMENT
LOWsrc/basic_memory/mcp/resources/__init__.py1"""MCP resources for Basic Memory."""COMMENT
LOWsrc/basic_memory/mcp/resources/__init__.py21 # "note_preview_ui_tool_ui",COMMENT
LOWsrc/basic_memory/api/v2/routers/knowledge_router.py421 detail=f"File path '{data.file_path}' is not normalized - "COMMENT
LOWsrc/basic_memory/alembic/alembic.ini1# A generic, single database configuration.COMMENT
LOWsrc/basic_memory/alembic/alembic.ini21# Any required deps can installed by adding `alembic[tz]` to the pip requirementsCOMMENT
LOWsrc/basic_memory/alembic/alembic.ini41# The path separator used here should be the separator specified by "version_path_separator" below.COMMENT
LOWsrc/basic_memory/alembic/alembic.ini61COMMENT
AI Slop Vocabulary13 hits · 24 pts
SeverityFileLineSnippetContext
LOWtests/repository/test_project_repository.py135 # So just create a non-default projectCOMMENT
MEDIUMintegrations/hermes/.github/workflows/release.yml7# git tag (`v*.*.*`) — NOT from __init__.py. This is robust to PRs thatCOMMENT
MEDIUMtest-int/semantic/litellm_live_harness.py345 # live calls when someone discovers the harness through `just --list`.COMMENT
LOWsrc/basic_memory/file_utils.py491 # No frontmatter, just return contentCOMMENT
LOWsrc/basic_memory/ignore_utils.py217 # If we can't read .gitignore, just use default patternsSTRING
MEDIUM…c/basic_memory/mcp/ui/html/search-results-tool-ui.html20`).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
MEDIUMsrc/basic_memory/mcp/ui/html/note-preview-tool-ui.html20`).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
MEDIUMsrc/basic_memory/mcp/tools/search.py718 """Search across all content in the knowledge base with comprehensive syntax support.STRING
MEDIUMsrc/basic_memory/mcp/tools/move_note.py949 # misleading the agent (#881 Gap 2). This is the robust backstop behindSTRING
MEDIUMsrc/basic_memory/mcp/resources/project_info.py22 """Get comprehensive information about the current Basic Memory project.STRING
MEDIUMsrc/basic_memory/services/project_service.py568 # Update in database using robust lookupCOMMENT
MEDIUMsrc/basic_memory/services/project_service.py603 # Get project from database using robust lookupCOMMENT
MEDIUMsrc/basic_memory/services/project_service.py645 """Get comprehensive information about the specified Basic Memory project.STRING
Modern AI Meta-Vocabulary6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMpyproject.toml179 "*/services/initialization.py", # Startup orchestration + background tasks (watchers); exercised indirectly in entryCODE
MEDIUMplugins/claude-code/hooks/pre-compact.sh6# the context window (and the texture of the session is about to be lost), weCOMMENT
MEDIUMtest-int/BENCHMARKS.md77### Optional guardrails (recommended for nightly runs only)COMMENT
MEDIUM…ic_memory_benchmarks/providers/baseline_fullcontext.py26# with room for prompt scaffolding. LongMemEval-S groups (~115K tokens) fit.COMMENT
MEDIUMsrc/basic_memory/repository/search_repository_base.py848 # Shared semantic search: sync_entity_vectors orchestrationCOMMENT
MEDIUMsrc/basic_memory/mcp/async_client.py330# Optional factory override for dependency injection.COMMENT
Hallucination Indicators1 hit · 15 pts
SeverityFileLineSnippetContext
CRITICALintegrations/hermes/tests/test_prefetch.py105 timeout = p._actor.call.call_args.kwargs.get("timeout") or p._actor.call.call_args[1].get(CODE
Dead Code5 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMtests/mcp/test_project_context.py3143CODE
MEDIUMtests/mcp/test_tool_edit_note.py917CODE
MEDIUMtests/mcp/test_tool_edit_note.py1118CODE
MEDIUMtests/mcp/tools/test_search_notes_multi_project.py179CODE
MEDIUMtests/indexing/test_forward_reference_resolution.py361CODE
Overly Generic Function Names2 hits · 2 pts
SeverityFileLineSnippetContext
LOWtest-int/mcp/test_edit_note_integration.py645 assert "def test_function():" in contentCODE
LOWtest-int/mcp/test_edit_note_integration.py603def test_function():CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWdocker-compose-postgres.yml7# Usage:COMMENT