fix: normalize paths to lowercase in cloud mode to prevent case collisions by phernandez · Pull Request #336 · basicmachines-co/basic-memory · GitHub
Skip to content

fix: normalize paths to lowercase in cloud mode to prevent case collisions - #336

Merged
phernandez merged 1 commit into
mainfrom
fix-cloud-case-sensitivity
Oct 5, 2025
Merged

fix: normalize paths to lowercase in cloud mode to prevent case collisions#336
phernandez merged 1 commit into
mainfrom
fix-cloud-case-sensitivity

Conversation

@phernandez

Copy link
Copy Markdown
Member

Summary

Fixes case-sensitive filesystem collisions on Linux tenant servers when clients use case-insensitive filesystems (macOS/Windows).

Problem

From basicmachines-co/basic-memory-cloud#106:

Tenant servers run Linux with case-sensitive filesystems (TigrisFS), but macOS/Windows clients have case-insensitive filesystems. This creates path collisions:

# On tenant server
$ ls -la /app/data/
drwxr-xr-x 2 root root    0 Oct  5 18:30 Documents
drwxr-xr-x 2 root root    0 Oct  5 18:30 documents

Users think they're working with the same directory, but the server creates separate directories.

Solution

When BASIC_MEMORY_PROJECT_ROOT is set (cloud mode):

  • All path components are normalized to lowercase during project creation
  • Prevents collisions like /app/data/Documents vs /app/data/documents
  • Added collision detection to catch any remaining edge cases

Examples

# Input → Normalized
"Documents/my-project""/app/data/documents/my-project"
"UPPERCASE/PATH""/app/data/uppercase/path"
"MixedCase/Path""/app/data/mixedcase/path"

Changes

src/basic_memory/services/project_service.py

  • Line 117: Convert path parts to lowercase in cloud mode
  • Lines 130-141: Add collision detection for case-insensitive duplicates

tests/services/test_project_service.py

  • test_add_project_with_project_root_normalizes_case: Verify lowercase normalization
  • test_add_project_with_project_root_detects_case_collisions: Verify collision detection

Testing

All 28 project service tests pass:

uv run pytest tests/services/test_project_service.py -v
# 28 passed, 0 failed

Impact

  • ✅ Prevents data loss from path confusion
  • ✅ Ensures consistent behavior across filesystems
  • ✅ Only affects cloud mode (BASIC_MEMORY_PROJECT_ROOT set)
  • ✅ Local mode unchanged (no PROJECT_ROOT constraint)

Resolves: basicmachines-co/basic-memory-cloud#106

🤖 Generated with Claude Code

…sions

Fixes case-sensitive filesystem issues on Linux tenant servers when
clients use case-insensitive filesystems (macOS/Windows).

When BASIC_MEMORY_PROJECT_ROOT is set (cloud mode):
- All path components are normalized to lowercase
- Prevents `/app/data/Documents` vs `/app/data/documents` collisions
- Adds collision detection for case-insensitive path matches

Resolves: basicmachines-co/basic-memory-cloud#106

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: phernandez <paul@basicmachines.co>
@github-actions

github-actions Bot commented Oct 5, 2025

Copy link
Copy Markdown
Contributor

@phernandez
phernandez merged commit 07e304c into main Oct 5, 2025
16 checks passed
@phernandez
phernandez deleted the fix-cloud-case-sensitivity branch October 5, 2025 22:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant