feat: ID-first storage architecture + remove memory-unsafe APIs (v6.0.0)

BREAKING CHANGES:

**ID-First Storage Paths**
- Direct O(1) entity access without type lookups
- Before: entities/nouns/{TYPE}/metadata/{SHARD}/{ID}.json
- After:  entities/nouns/{SHARD}/{ID}/metadata.json
- Migration handled automatically on first init()

**Removed Memory-Unsafe APIs**
- Removed brain.merge() - loaded all entities into memory
- Removed brain.diff() - loaded all entities into memory
- Removed brain.data().backup() - loaded all entities into memory
- Removed brain.data().restore() - depended on backup()
- Removed CLI commands: backup, restore, cow merge

**Migration Paths**
- merge() → Use checkout() or manually copy entities with pagination
- diff() → Use asOf() with manual paginated comparison
- backup() → Use fork() for instant COW snapshots
- restore() → Use checkout() to switch to snapshot branch

Core Improvements:
-  All 8 storage adapters properly call super.init()
-  GraphAdjacencyIndex integration in BaseStorage.init()
-  Fixed ID-first path bugs (vector.json → vectors.json)
-  Fixed MemoryStorage.initializeCounts() for ID-first paths
-  New VFS APIs: du(), access(), find()
-  Comprehensive documentation with migration guides

Storage Adapters Fixed:
- MemoryStorage, FileSystemStorage, AzureBlobStorage
- GCSStorage, R2Storage, S3CompatibleStorage
- OPFSStorage, HistoricalStorageAdapter

Files Changed: 28 files, +1,075/-1,933 lines (net -858)

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
David Snelling 2025-11-19 16:46:11 -08:00
parent 9730ca41e5
commit 42ae5be455
28 changed files with 1079 additions and 1937 deletions

View file

@ -536,18 +536,8 @@ program
// ===== Data Management Commands =====
program
.command('backup <file>')
.description('Create database backup')
.option('--compress', 'Compress backup')
.action(dataCommands.backup)
program
.command('restore <file>')
.description('Restore from backup')
.option('--merge', 'Merge with existing data (default: replace)')
.action(dataCommands.restore)
program
.command('data-stats')
.description('Show detailed database statistics')
@ -657,13 +647,6 @@ program
.description('Switch to a different branch')
.action(cowCommands.checkout)
program
.command('merge [source] [target]')
.description('Merge a fork/branch into another branch')
.option('--strategy <type>', 'Merge strategy (last-write-wins|custom)', 'last-write-wins')
.option('-f, --force', 'Force merge on conflicts')
.action(cowCommands.merge)
program
.command('history')
.alias('log')