Skip to main content
Glama

basic-memory

bug-fixes.md8.96 kB
# Bug Fixes and Improvements **Status**: Bug Fixes **Version**: v0.15.0 **Impact**: Stability, reliability, platform compatibility ## Overview v0.15.0 includes 13+ bug fixes addressing entity conflicts, URL handling, file operations, and platform compatibility. These fixes improve stability and eliminate edge cases that could cause errors. ## Key Fixes ### 1. Entity Upsert Conflict Resolution (#328) **Problem:** Database-level conflicts when upserting entities with same title/folder caused crashes. **Fix:** Simplified entity upsert to use database-level conflict resolution with `ON CONFLICT` clause. **Before:** ```python # Manual conflict checking (error-prone) existing = await get_entity_by_title(title, folder) if existing: await update_entity(existing.id, data) else: await insert_entity(data) # → Could fail if concurrent insert ``` **After:** ```python # Database handles conflict await db.execute(""" INSERT INTO entities (title, folder, content) VALUES (?, ?, ?) ON CONFLICT (title, folder) DO UPDATE SET content = excluded.content """) # → Always works, even with concurrent access ``` **Benefit:** Eliminates race conditions, more reliable writes ### 2. memory:// URL Underscore Normalization (#329) **Problem:** Underscores in memory:// URLs weren't normalized to hyphens, causing lookups to fail. **Fix:** Normalize underscores to hyphens when resolving memory:// URLs. **Before:** ```python # URL with underscores url = "memory://my_note" entity = await resolve_url(url) # → Not found! (permalink is "my-note") ``` **After:** ```python # Automatic normalization url = "memory://my_note" entity = await resolve_url(url) # → Found! (my_note → my-note) ``` **Examples:** - `memory://my_note` → finds entity with permalink `my-note` - `memory://user_guide` → finds entity with permalink `user-guide` - `memory://api_docs` → finds entity with permalink `api-docs` **Benefit:** More forgiving URL matching, fewer lookup failures ### 3. .gitignore File Filtering (#287, #285) **Problem:** Sync process didn't respect .gitignore patterns, indexing sensitive files and build artifacts. **Fix:** Integrated .gitignore support - files matching patterns are automatically skipped during sync. **Before:** ```bash bm sync # → Indexed .env files # → Indexed node_modules/ # → Indexed build artifacts ``` **After:** ```bash # .gitignore .env node_modules/ dist/ bm sync # → Skipped .env (gitignored) # → Skipped node_modules/ (gitignored) # → Skipped dist/ (gitignored) ``` **Benefit:** Better security, cleaner knowledge base, faster sync **See:** `gitignore-integration.md` for full details ### 4. move_note File Extension Handling (#281) **Problem:** `move_note` failed when destination path included or omitted `.md` extension inconsistently. **Fix:** Automatically handle file extensions - works with or without `.md`. **Before:** ```python # Had to match exactly await move_note("My Note", "new-folder/my-note.md") # ✓ await move_note("My Note", "new-folder/my-note") # ✗ Failed ``` **After:** ```python # Both work await move_note("My Note", "new-folder/my-note.md") # ✓ Works await move_note("My Note", "new-folder/my-note") # ✓ Works (adds .md) ``` **Automatic handling:** - Input without `.md` → adds `.md` - Input with `.md` → uses as-is - Always creates valid markdown file **Benefit:** More forgiving API, fewer errors ### 5. .env File Loading Removed (#330) **Problem:** Automatic .env file loading created security vulnerability - could load untrusted files. **Fix:** Removed automatic .env loading. Environment variables must be set explicitly. **Impact:** Breaking change for users relying on .env files **Migration:** ```bash # Before: Used .env file # .env BASIC_MEMORY_LOG_LEVEL=DEBUG # After: Use explicit export export BASIC_MEMORY_LOG_LEVEL=DEBUG # Or use direnv # .envrc (git-ignored) export BASIC_MEMORY_LOG_LEVEL=DEBUG ``` **Benefit:** Better security, explicit configuration **See:** `env-file-removal.md` for migration guide ### 6. Python 3.13 Compatibility **Problem:** Code not tested with Python 3.13, potential compatibility issues. **Fix:** - Added Python 3.13 to CI test matrix - Fixed deprecation warnings - Verified all dependencies compatible - Updated type hints for 3.13 **Before:** ```yaml # .github/workflows/test.yml python-version: ["3.10", "3.11", "3.12"] ``` **After:** ```yaml # .github/workflows/test.yml python-version: ["3.10", "3.11", "3.12", "3.13"] ``` **Benefit:** Full Python 3.13 support, future-proof ## Additional Fixes ### Minimum Timeframe Enforcement (#318) **Problem:** `recent_activity` with very short timeframes caused timezone issues. **Fix:** Enforce minimum 1-day timeframe to handle timezone edge cases. ```python # Before: Could use any timeframe await recent_activity(timeframe="1h") # Timezone issues # After: Minimum 1 day await recent_activity(timeframe="1h") # → Auto-adjusted to "1d" ``` ### Permalink Collision Prevention **Problem:** Strict link resolution could create duplicate permalinks. **Fix:** Enhanced permalink uniqueness checking to prevent collisions. ### DateTime JSON Schema (#312) **Problem:** MCP validation failed on DateTime fields - missing proper JSON schema format. **Fix:** Added proper `format: "date-time"` annotations for MCP compatibility. ```python # Before: No format created_at: datetime # After: With format created_at: datetime = Field(json_schema_extra={"format": "date-time"}) ``` ## Testing Coverage ### Automated Tests All fixes include comprehensive tests: ```bash # Entity upsert conflict tests/services/test_entity_upsert.py # URL normalization tests/mcp/test_build_context_validation.py # File extension handling tests/mcp/test_tool_move_note.py # gitignore integration tests/sync/test_gitignore.py ``` ### Manual Testing Checklist - [x] Entity upsert with concurrent access - [x] memory:// URLs with underscores - [x] .gitignore file filtering - [x] move_note with/without .md extension - [x] .env file not auto-loaded - [x] Python 3.13 compatibility ## Migration Guide ### If You're Affected by These Bugs **Entity Conflicts:** - No action needed - automatically fixed **memory:// URLs:** - No action needed - URLs now more forgiving - Previously broken URLs should work now **.gitignore Integration:** - Create `.gitignore` if you don't have one - Add patterns for files to skip **move_note:** - No action needed - both formats now work - Can simplify code that manually added `.md` **.env Files:** - See `env-file-removal.md` for full migration - Use explicit environment variables or direnv **Python 3.13:** - Upgrade if desired: `pip install --upgrade basic-memory` - Or stay on 3.10-3.12 (still supported) ## Verification ### Check Entity Upserts Work ```python # Should not conflict await write_note("Test", "Content", "folder") await write_note("Test", "Updated", "folder") # Updates, not errors ``` ### Check URL Normalization ```python # Both should work context1 = await build_context("memory://my_note") context2 = await build_context("memory://my-note") # Both resolve to same entity ``` ### Check .gitignore Respected ```bash echo ".env" >> .gitignore echo "SECRET=test" > .env bm sync # .env should be skipped ``` ### Check move_note Extension ```python # Both work await move_note("Note", "folder/note.md") # ✓ await move_note("Note", "folder/note") # ✓ ``` ### Check .env Not Loaded ```bash echo "BASIC_MEMORY_LOG_LEVEL=DEBUG" > .env bm sync # LOG_LEVEL not set (not auto-loaded) export BASIC_MEMORY_LOG_LEVEL=DEBUG bm sync # LOG_LEVEL now set (explicit) ``` ### Check Python 3.13 ```bash python3.13 --version python3.13 -m pip install basic-memory python3.13 -m basic_memory --version ``` ## Known Issues (Fixed) ### Previously Reported, Now Fixed 1. ✅ Entity upsert conflicts (#328) 2. ✅ memory:// URL underscore handling (#329) 3. ✅ .gitignore not respected (#287, #285) 4. ✅ move_note extension issues (#281) 5. ✅ .env security vulnerability (#330) 6. ✅ Minimum timeframe issues (#318) 7. ✅ DateTime JSON schema (#312) 8. ✅ Permalink collisions 9. ✅ Python 3.13 compatibility ## Upgrade Notes ### From v0.14.x All bug fixes apply automatically: ```bash # Upgrade pip install --upgrade basic-memory # Restart MCP server # Bug fixes active immediately ``` ### Breaking Changes Only one breaking change: - ✅ .env file auto-loading removed (#330) - See `env-file-removal.md` for migration All other fixes are backward compatible. ## Reporting New Issues If you encounter issues: 1. Check this list to see if already fixed 2. Verify you're on v0.15.0+: `bm --version` 3. Report at: https://github.com/basicmachines-co/basic-memory/issues ## See Also - `gitignore-integration.md` - .gitignore support details - `env-file-removal.md` - .env migration guide - GitHub issues for each fix - v0.15.0 changelog

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/basicmachines-co/basic-memory'

If you have feedback or need assistance with the MCP directory API, please join our Discord server