Skip to content

[BUG] BM loses track of note after editing it with vim #248

@discapes

Description

@discapes

When I create a note in BM, edit it with vim (don't have to even change anything), BM cannot find it anymore. Running bm sync fixes this, but it isn't synced automatically.

Steps To Reproduce

bm tool write-note --title test --folder '' --content 'hello'
bm tool read-note test # works
vim test.md # don't change anything, just :wq
bm tool read-note test # doesn't find the note

Environment

  • OS: Debian GNU/Linux 12 (bookworm) podman container inside NixOS 25.05 (Warbler)
  • Python version: Python 3.11.2
  • Basic Memory version: 0.14.3
  • Installation method: uv

Output:

root@fbadba956d98:~/basic-memory# bm tool write-note --title test --folder '' --content 'hello'
2025-08-07 15:23:00.906 | INFO     | basic_memory.utils:setup_logging:167 - ENV: 'dev' Log level: 'INFO' Logging to .basic-memory/basic-memory-api.log
2025-08-07 15:23:00.906 | INFO     | basic_memory.config:setup_basic_memory_logging:367 - Basic Memory 0.14.3 (Project: main)
2025-08-07 15:23:02.196 | DEBUG    | basic_memory.api.template_loader:__init__:235 - Initialized template loader with directory: /root/.local/share/uv/tools/basic-memory/lib/python3.12/site-packages/basic_memory/templates
2025-08-07 15:23:02.319 | DEBUG    | basic_memory.mcp.async_client:create_client:23 - Creating ASGI client for local Basic Memory API
2025-08-07 15:23:02.361 | INFO     | basic_memory.services.initialization:initialize_app:156 - Initializing app...
2025-08-07 15:23:02.362 | DEBUG    | basic_memory.db:_create_engine_and_session:81 - Creating engine for db_url: sqlite+aiosqlite:////root/.basic-memory/memory.db
2025-08-07 15:23:02.365 | INFO     | basic_memory.db:run_migrations:176 - Running database migrations...
2025-08-07 15:23:02.370 | INFO     | basic_memory.db:run_migrations:195 - Migrations completed successfully
2025-08-07 15:23:02.370 | INFO     | basic_memory.repository.search_repository:init_search_index:115 - Initializing search index
2025-08-07 15:23:02.373 | INFO     | basic_memory.services.initialization:initialize_database:30 - Database initialization completed
2025-08-07 15:23:02.373 | INFO     | basic_memory.services.initialization:reconcile_projects_with_config:47 - Reconciling projects from config with database...
2025-08-07 15:23:02.373 | INFO     | basic_memory.services.project_service:synchronize_projects:233 - Synchronizing projects between database and configuration
2025-08-07 15:23:02.383 | DEBUG    | basic_memory.repository.repository:find_all:157 - Finding all Project (skip=0, limit=None)
2025-08-07 15:23:02.384 | DEBUG    | basic_memory.repository.repository:find_all:170 - Found 1 Project records
2025-08-07 15:23:02.386 | INFO     | basic_memory.services.project_service:synchronize_projects:301 - Project synchronization complete
2025-08-07 15:23:02.387 | INFO     | basic_memory.mcp.project_session:initialize:34 - Initialized project session with default project: main
2025-08-07 15:23:02.387 | INFO     | basic_memory.mcp.project_session:refresh_from_config:81 - Refreshed project session from config, new default: main
2025-08-07 15:23:02.387 | INFO     | basic_memory.services.initialization:reconcile_projects_with_config:64 - Projects successfully reconciled between config and database
2025-08-07 15:23:02.387 | INFO     | basic_memory.services.initialization:initialize_app:163 - App initialization completed (migration running in background if needed)
2025-08-07 15:23:02.387 | INFO     | basic_memory.services.initialization:ensure_initialization:177 - Initialization completed successfully: result=None
2025-08-07 15:23:02.387 | INFO     | basic_memory.mcp.project_session:set_current_project:53 - Switched project context: main -> main
2025-08-07 15:23:02.388 | INFO     | basic_memory.mcp.tools.write_note:write_note:73 - MCP tool call tool=write_note folder=, title=test, tags=None
2025-08-07 15:23:02.389 | DEBUG    | basic_memory.mcp.tools.write_note:write_note:110 - Creating entity via API permalink=test
2025-08-07 15:23:02.389 | DEBUG    | basic_memory.mcp.tools.utils:call_put:192 - Calling PUT '/main/knowledge/entities/test'
2025-08-07 15:23:02.396 | DEBUG    | basic_memory.deps:get_file_service:230 - Creating FileService for project: main, base_path: /root/basic-memory
2025-08-07 15:23:02.396 | DEBUG    | basic_memory.deps:get_file_service:234 - Created FileService for project: <basic_memory.services.file_service.FileService object at 0x7fe319d292b0> 
2025-08-07 15:23:02.400 | INFO     | basic_memory.api.routers.knowledge_router:create_or_update_entity:70 - API request: create_or_update_entity for project='main', permalink='test', data.entity_type='note', data.title='test'
2025-08-07 15:23:02.400 | DEBUG    | basic_memory.services.entity_service:create_or_update_entity:138 - Creating or updating entity: test.md, permalink: test
2025-08-07 15:23:02.418 | DEBUG    | basic_memory.services.entity_service:create_entity:156 - Creating entity: test
2025-08-07 15:23:02.418 | DEBUG    | basic_memory.services.file_service:exists:98 - Checking file existence: path=test.md
2025-08-07 15:23:02.418 | DEBUG    | basic_memory.repository.repository:find_all:157 - Finding all Entity (skip=0, limit=None)
2025-08-07 15:23:02.425 | DEBUG    | basic_memory.repository.repository:find_all:170 - Found 4 Entity records
2025-08-07 15:23:02.429 | INFO     | basic_memory.services.file_service:write_file:132 - Writing file: path=test.md, content_length=53, is_markdown=True
2025-08-07 15:23:02.430 | DEBUG    | basic_memory.file_utils:write_file_atomic:90 - Wrote file atomically
2025-08-07 15:23:02.430 | DEBUG    | basic_memory.services.file_service:write_file:143 - File write completed path=/root/basic-memory/test.md, checksum='b1ff04050bd6ed37e18cb6204b1e58b57ac07c295ad325d090406ff5e22b0bbe'
2025-08-07 15:23:02.430 | DEBUG    | basic_memory.services.entity_service:create_entity_from_markdown:354 - Creating entity: test file_path: test.md
2025-08-07 15:23:02.441 | DEBUG    | basic_memory.services.entity_service:update_entity_relations:413 - Updating relations for entity: test.md
2025-08-07 15:23:02.453 | DEBUG    | basic_memory.repository.repository:update:258 - Updating Entity 5 with data: {'checksum': 'b1ff04050bd6ed37e18cb6204b1e58b57ac07c295ad325d090406ff5e22b0bbe'}
2025-08-07 15:23:02.457 | DEBUG    | basic_memory.repository.repository:update:278 - Updated Entity: 5
2025-08-07 15:23:02.465 | INFO     | basic_memory.sync.sync_service:resolve_relations:556 - Resolving forward references
2025-08-07 15:23:02.465 | DEBUG    | basic_memory.api.routers.knowledge_router:create_or_update_entity:96 - Resolved relations after creating entity: test
2025-08-07 15:23:02.465 | INFO     | basic_memory.api.routers.knowledge_router:create_or_update_entity:103 - API response: result.title='test', result.permalink='test', created=True, status_code=201
2025-08-07 15:23:02.467 | DEBUG    | basic_memory.services.file_service:read_entity_content:63 - Reading entity content, entity_id=5, permalink=test
/root/.local/share/uv/tools/basic-memory/lib/python3.12/site-packages/aiosqlite/core.py:105: DeprecationWarning: The default datetime adapter is deprecated as of Python 3.12; see the sqlite3 documentation for suggested replacement recipes
  result = function()
2025-08-07 15:23:02.469 | DEBUG    | basic_memory.repository.search_repository:index_item:553 - indexed row SearchIndexRow(project_id=1, id=5, type='entity', file_path='test.md', created_at=datetime.datetime(2025, 8, 7, 15, 23, 2, 429642), updated_at=datetime.datetime(2025, 8, 7, 15, 23, 2, 429642), permalink='test', metadata={'entity_type': 'note'}, score=None, title='test', content_stems='tes\ntest\nest\nhello\ntes\ntest\nest\nst.\ntest.md\ntes\n.md\nest\nt.m', content_snippet='hello', entity_id=5, category=None, from_id=None, to_id=None, relation_type=None)
2025-08-07 15:23:02.473 | INFO     | basic_memory.mcp.tools.write_note:write_note:154 - MCP tool response: tool=write_note action=Created permalink=test observations_count=0 relations_count=0 resolved_relations=0 unresolved_relations=0 status_code=201
# Created note
file_path: test.md
permalink: test
checksum: b1ff0405
root@fbadba956d98:~/basic-memory# bm tool read-note test
2025-08-07 15:23:21.967 | INFO     | basic_memory.utils:setup_logging:167 - ENV: 'dev' Log level: 'INFO' Logging to .basic-memory/basic-memory-api.log
2025-08-07 15:23:21.968 | INFO     | basic_memory.config:setup_basic_memory_logging:367 - Basic Memory 0.14.3 (Project: main)
2025-08-07 15:23:23.295 | DEBUG    | basic_memory.api.template_loader:__init__:235 - Initialized template loader with directory: /root/.local/share/uv/tools/basic-memory/lib/python3.12/site-packages/basic_memory/templates
2025-08-07 15:23:23.428 | DEBUG    | basic_memory.mcp.async_client:create_client:23 - Creating ASGI client for local Basic Memory API
2025-08-07 15:23:23.473 | INFO     | basic_memory.services.initialization:initialize_app:156 - Initializing app...
2025-08-07 15:23:23.473 | DEBUG    | basic_memory.db:_create_engine_and_session:81 - Creating engine for db_url: sqlite+aiosqlite:////root/.basic-memory/memory.db
2025-08-07 15:23:23.476 | INFO     | basic_memory.db:run_migrations:176 - Running database migrations...
2025-08-07 15:23:23.481 | INFO     | basic_memory.db:run_migrations:195 - Migrations completed successfully
2025-08-07 15:23:23.481 | INFO     | basic_memory.repository.search_repository:init_search_index:115 - Initializing search index
2025-08-07 15:23:23.484 | INFO     | basic_memory.services.initialization:initialize_database:30 - Database initialization completed
2025-08-07 15:23:23.484 | INFO     | basic_memory.services.initialization:reconcile_projects_with_config:47 - Reconciling projects from config with database...
2025-08-07 15:23:23.484 | INFO     | basic_memory.services.project_service:synchronize_projects:233 - Synchronizing projects between database and configuration
2025-08-07 15:23:23.494 | DEBUG    | basic_memory.repository.repository:find_all:157 - Finding all Project (skip=0, limit=None)
2025-08-07 15:23:23.495 | DEBUG    | basic_memory.repository.repository:find_all:170 - Found 1 Project records
2025-08-07 15:23:23.497 | INFO     | basic_memory.services.project_service:synchronize_projects:301 - Project synchronization complete
2025-08-07 15:23:23.498 | INFO     | basic_memory.mcp.project_session:initialize:34 - Initialized project session with default project: main
2025-08-07 15:23:23.498 | INFO     | basic_memory.mcp.project_session:refresh_from_config:81 - Refreshed project session from config, new default: main
2025-08-07 15:23:23.498 | INFO     | basic_memory.services.initialization:reconcile_projects_with_config:64 - Projects successfully reconciled between config and database
2025-08-07 15:23:23.498 | INFO     | basic_memory.services.initialization:initialize_app:163 - App initialization completed (migration running in background if needed)
2025-08-07 15:23:23.499 | INFO     | basic_memory.services.initialization:ensure_initialization:177 - Initialization completed successfully: result=None
2025-08-07 15:23:23.499 | INFO     | basic_memory.mcp.project_session:set_current_project:53 - Switched project context: main -> main
2025-08-07 15:23:23.500 | INFO     | basic_memory.mcp.tools.read_note:read_note:83 - Attempting to read note from URL: /main/resource/test
2025-08-07 15:23:23.500 | DEBUG    | basic_memory.mcp.tools.utils:call_get:108 - Calling GET '/main/resource/test' params: '{'page': 1, 'page_size': 10}'
2025-08-07 15:23:23.508 | DEBUG    | basic_memory.deps:get_file_service:230 - Creating FileService for project: main, base_path: /root/basic-memory
2025-08-07 15:23:23.508 | DEBUG    | basic_memory.deps:get_file_service:234 - Created FileService for project: <basic_memory.services.file_service.FileService object at 0x7f1f4d641310> 
2025-08-07 15:23:23.509 | DEBUG    | basic_memory.api.routers.resource_router:get_resource_content:55 - Getting content for: test
2025-08-07 15:23:23.518 | DEBUG    | basic_memory.services.link_resolver:resolve_link:47 - Found exact permalink match: test
2025-08-07 15:23:23.521 | INFO     | basic_memory.mcp.tools.read_note:read_note:91 - Returning read_note result from resource: test
---
title: test
type: note
permalink: test
---

hello
root@fbadba956d98:~/basic-memory# vim test.md 
root@fbadba956d98:~/basic-memory# bm tool read-note test
2025-08-07 15:23:35.185 | INFO     | basic_memory.utils:setup_logging:167 - ENV: 'dev' Log level: 'INFO' Logging to .basic-memory/basic-memory-api.log
2025-08-07 15:23:35.185 | INFO     | basic_memory.config:setup_basic_memory_logging:367 - Basic Memory 0.14.3 (Project: main)
2025-08-07 15:23:36.480 | DEBUG    | basic_memory.api.template_loader:__init__:235 - Initialized template loader with directory: /root/.local/share/uv/tools/basic-memory/lib/python3.12/site-packages/basic_memory/templates
2025-08-07 15:23:36.607 | DEBUG    | basic_memory.mcp.async_client:create_client:23 - Creating ASGI client for local Basic Memory API
2025-08-07 15:23:36.653 | INFO     | basic_memory.services.initialization:initialize_app:156 - Initializing app...
2025-08-07 15:23:36.653 | DEBUG    | basic_memory.db:_create_engine_and_session:81 - Creating engine for db_url: sqlite+aiosqlite:////root/.basic-memory/memory.db
2025-08-07 15:23:36.657 | INFO     | basic_memory.db:run_migrations:176 - Running database migrations...
2025-08-07 15:23:36.664 | INFO     | basic_memory.db:run_migrations:195 - Migrations completed successfully
2025-08-07 15:23:36.664 | INFO     | basic_memory.repository.search_repository:init_search_index:115 - Initializing search index
2025-08-07 15:23:36.667 | INFO     | basic_memory.services.initialization:initialize_database:30 - Database initialization completed
2025-08-07 15:23:36.667 | INFO     | basic_memory.services.initialization:reconcile_projects_with_config:47 - Reconciling projects from config with database...
2025-08-07 15:23:36.667 | INFO     | basic_memory.services.project_service:synchronize_projects:233 - Synchronizing projects between database and configuration
2025-08-07 15:23:36.677 | DEBUG    | basic_memory.repository.repository:find_all:157 - Finding all Project (skip=0, limit=None)
2025-08-07 15:23:36.679 | DEBUG    | basic_memory.repository.repository:find_all:170 - Found 1 Project records
2025-08-07 15:23:36.681 | INFO     | basic_memory.services.project_service:synchronize_projects:301 - Project synchronization complete
2025-08-07 15:23:36.681 | INFO     | basic_memory.mcp.project_session:initialize:34 - Initialized project session with default project: main
2025-08-07 15:23:36.682 | INFO     | basic_memory.mcp.project_session:refresh_from_config:81 - Refreshed project session from config, new default: main
2025-08-07 15:23:36.682 | INFO     | basic_memory.services.initialization:reconcile_projects_with_config:64 - Projects successfully reconciled between config and database
2025-08-07 15:23:36.682 | INFO     | basic_memory.services.initialization:initialize_app:163 - App initialization completed (migration running in background if needed)
2025-08-07 15:23:36.682 | INFO     | basic_memory.services.initialization:ensure_initialization:177 - Initialization completed successfully: result=None
2025-08-07 15:23:36.682 | INFO     | basic_memory.mcp.project_session:set_current_project:53 - Switched project context: main -> main
2025-08-07 15:23:36.684 | INFO     | basic_memory.mcp.tools.read_note:read_note:83 - Attempting to read note from URL: /main/resource/test
2025-08-07 15:23:36.684 | DEBUG    | basic_memory.mcp.tools.utils:call_get:108 - Calling GET '/main/resource/test' params: '{'page': 1, 'page_size': 10}'
2025-08-07 15:23:36.692 | DEBUG    | basic_memory.deps:get_file_service:230 - Creating FileService for project: main, base_path: /root/basic-memory
2025-08-07 15:23:36.692 | DEBUG    | basic_memory.deps:get_file_service:234 - Created FileService for project: <basic_memory.services.file_service.FileService object at 0x7f008bc8fec0> 
2025-08-07 15:23:36.693 | DEBUG    | basic_memory.api.routers.resource_router:get_resource_content:55 - Getting content for: test
2025-08-07 15:23:36.706 | INFO     | basic_memory.mcp.tools.utils:call_get:140 - Client error: GET /main/resource/test: Resource not found: test
2025-08-07 15:23:36.707 | INFO     | basic_memory.mcp.tools.read_note:read_note:94 - Direct lookup failed for '/main/resource/test': Resource not found: test
2025-08-07 15:23:36.707 | INFO     | basic_memory.mcp.tools.read_note:read_note:98 - Search title for: test
2025-08-07 15:23:36.707 | INFO     | basic_memory.mcp.tools.search:search_notes:349 - Searching for permalink=None permalink_match=None text=None title='test' types=None entity_types=None after_date=None
2025-08-07 15:23:36.707 | DEBUG    | basic_memory.mcp.tools.utils:call_post:385 - Calling POST '/main/search/'
2025-08-07 15:23:36.713 | DEBUG    | basic_memory.deps:get_file_service:230 - Creating FileService for project: main, base_path: /root/basic-memory
2025-08-07 15:23:36.714 | DEBUG    | basic_memory.deps:get_file_service:234 - Created FileService for project: <basic_memory.services.file_service.FileService object at 0x7f009041dd90> 
2025-08-07 15:23:36.717 | DEBUG    | basic_memory.mcp.tools.utils:call_post:402 - response: {'results': [], 'current_page': 1, 'page_size': 10}
2025-08-07 15:23:36.718 | INFO     | basic_memory.mcp.tools.search:search_notes:362 - Search returned no results for query: test
2025-08-07 15:23:36.718 | INFO     | basic_memory.mcp.tools.read_note:read_note:119 - No results in title search for: test
2025-08-07 15:23:36.718 | INFO     | basic_memory.mcp.tools.read_note:read_note:122 - Title search failed, trying text search for: test
2025-08-07 15:23:36.719 | INFO     | basic_memory.mcp.tools.search:search_notes:349 - Searching for permalink=None permalink_match=None text='test' title=None types=None entity_types=None after_date=None
2025-08-07 15:23:36.719 | DEBUG    | basic_memory.mcp.tools.utils:call_post:385 - Calling POST '/main/search/'
2025-08-07 15:23:36.724 | DEBUG    | basic_memory.deps:get_file_service:230 - Creating FileService for project: main, base_path: /root/basic-memory
2025-08-07 15:23:36.724 | DEBUG    | basic_memory.deps:get_file_service:234 - Created FileService for project: <basic_memory.services.file_service.FileService object at 0x7f009029a690> 
2025-08-07 15:23:36.726 | DEBUG    | basic_memory.mcp.tools.utils:call_post:402 - response: {'results': [], 'current_page': 1, 'page_size': 10}
2025-08-07 15:23:36.726 | INFO     | basic_memory.mcp.tools.search:search_notes:362 - Search returned no results for query: test

# Note Not Found: "test"

I searched for "test" using multiple methods (direct lookup, title search, and text search) but couldn't find any matching notes. Here are some suggestions:
....

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions