2025-11-01 11:56:11 -07:00
/ * *
* Instant Fork Usage Examples ( v5 . 0.0 )
*
* COW is ZERO - CONFIG in v5 . 0.0 :
* - No setup needed
* - No configuration
* - Just works automatically
*
* This example shows how EASY and ELEGANT fork ( ) is for developers .
* /
import { Brainy } from '@soulcraft/brainy'
// ========== Example 1: Basic Fork (Zero Config) ==========
async function basicFork() {
// Create Brainy (COW automatic!)
const brain = new Brainy ( {
storage : { adapter : 'memory' }
} )
await brain . init ( )
// Add some data
await brain . add ( { noun : 'user' , data : { name : 'Alice' } } )
await brain . add ( { noun : 'user' , data : { name : 'Bob' } } )
// Fork instantly (1-2 seconds, even with millions of entities!)
const experiment = await brain . fork ( 'experiment' )
// Make changes in fork (doesn't affect main)
await experiment . add ( { noun : 'user' , data : { name : 'Charlie' } } )
// Main brain unchanged
console . log ( await brain . find ( { noun : 'user' } ) ) // Alice, Bob
console . log ( await experiment . find ( { noun : 'user' } ) ) // Alice, Bob, Charlie
// That's it! Zero config, pure elegance.
}
// ========== Example 2: Safe Experimentation ==========
async function safeExperimentation() {
const brain = new Brainy ( {
storage : { adapter : 'filesystem' , path : './data' }
} )
await brain . init ( )
// Production data
const users = await brain . find ( { noun : 'user' } )
console . log ( ` Production: ${ users . length } users ` )
// Test a risky operation in fork
const test = await brain . fork ( 'test-migration' )
// Run migration on fork (safe!)
for ( const user of await test . find ( { noun : 'user' } ) ) {
await test . update ( user . id , {
email : user.data.email.toLowerCase ( ) // Risky transformation
} )
}
// Test it
const results = await test . find ( { noun : 'user' } )
if ( results . every ( r = > r . data . email === r . data . email . toLowerCase ( ) ) ) {
console . log ( '✅ Migration safe, apply to production' )
// Apply to production...
} else {
console . log ( '❌ Migration failed, discard fork' )
await test . destroy ( ) // Discard failed experiment
}
}
// ========== Example 3: A/B Testing ==========
async function abTesting() {
const brain = new Brainy ( {
storage : { adapter : 's3' , bucket : 'my-data' }
} )
await brain . init ( )
// Create variant A (control)
const variantA = await brain . fork ( 'variant-a' )
// Create variant B (test)
const variantB = await brain . fork ( 'variant-b' )
// Run different algorithms
await variantA . processWithAlgorithm ( 'current' )
await variantB . processWithAlgorithm ( 'improved' )
// Compare results
const metricsA = await variantA . getMetrics ( )
const metricsB = await variantB . getMetrics ( )
console . log ( 'A:' , metricsA . accuracy )
console . log ( 'B:' , metricsB . accuracy )
// Choose winner, apply to main
if ( metricsB . accuracy > metricsA . accuracy ) {
console . log ( 'B wins! Deploying...' )
// Merge B to main
}
}
// ========== Example 4: Time Travel (Enterprise) ==========
async function timeTravel() {
const brain = new Brainy ( {
storage : { adapter : 'memory' }
} )
await brain . init ( )
// Add data over time
await brain . add ( { noun : 'doc' , data : { version : 1 } } )
await brain . commit ( { message : 'Version 1' } )
const yesterday = Date . now ( ) - 86400000 // 24 hours ago
await brain . add ( { noun : 'doc' , data : { version : 2 } } )
await brain . commit ( { message : 'Version 2' } )
// Query as of yesterday (time travel!)
const snapshot = await brain . asOf ( yesterday )
const docs = await snapshot . find ( { noun : 'doc' } )
console . log ( docs [ 0 ] . data . version ) // 1 (from yesterday!)
// Zero config, pure magic ✨
}
// ========== Example 5: Backup & Restore (Instant) ==========
async function instantBackup() {
const brain = new Brainy ( {
storage : { adapter : 'memory' }
} )
await brain . init ( )
// Work with production data
await brain . add ( { noun : 'important' , data : { value : 'critical' } } )
// Instant backup (1-2 seconds!)
const backup = await brain . fork ( 'backup-2024-01-01' )
// Continue working
await brain . delete ( ( await brain . find ( { noun : 'important' } ) ) [ 0 ] . id )
// Oops! Need to restore
const restored = await brain . rollback ( backup . getCurrentCommit ( ) )
// Data restored instantly!
console . log ( await brain . find ( { noun : 'important' } ) ) // Back!
}
// ========== Example 6: Distributed Teams (Fork per Developer) ==========
async function distributedDevelopment() {
// Main production brain
const production = new Brainy ( {
storage : { adapter : 's3' , bucket : 'production-data' }
} )
await production . init ( )
// Alice's fork
const alice = await production . fork ( 'alice-feature-x' )
// Bob's fork
const bob = await production . fork ( 'bob-feature-y' )
// Both work independently (zero conflicts!)
await alice . add ( { noun : 'feature' , data : { name : 'X' } } )
await bob . add ( { noun : 'feature' , data : { name : 'Y' } } )
// Merge when ready
await production . merge ( alice , { author : 'Alice' } )
await production . merge ( bob , { author : 'Bob' } )
// Production has both features!
}
// ========== Example 7: VFS Snapshots ==========
async function vfsSnapshots() {
const brain = new Brainy ( {
storage : { adapter : 'memory' } ,
vfs : { enabled : true }
} )
await brain . init ( )
// Create file structure
await brain . vfs . writeFile ( '/project/README.md' , '# My Project' )
await brain . vfs . writeFile ( '/project/src/index.ts' , 'console.log("v1")' )
await brain . commit ( { message : 'Initial project' } )
// Fork for refactoring
const refactor = await brain . fork ( 'refactor' )
// Refactor code in fork
await refactor . vfs . writeFile ( '/project/src/index.ts' , 'console.log("v2")' )
await refactor . vfs . mkdir ( '/project/src/utils' )
// Test refactor
// ...
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>
2025-11-19 16:46:11 -08:00
// Switch to refactor branch if successful
// await brain.checkout('refactor')
2025-11-01 11:56:11 -07:00
}
// ========== The Key: It's All Zero Config! ==========
async function zeroConfigDemo() {
// This is ALL you need:
const brain = new Brainy ( { storage : { adapter : 'memory' } } )
await brain . init ( )
// COW is automatic:
// ✅ Compression: automatic (based on data type)
// ✅ Deduplication: automatic (content-addressable)
// ✅ Caching: automatic (LRU with memory limits)
// ✅ Reference counting: automatic (safe deletion)
// ✅ Garbage collection: automatic (optional manual trigger)
// Fork is instant:
const fork = await brain . fork ( ) // < 2 seconds even at 1M entities
// That's it! No configuration, no complexity, pure elegance.
}
// ========== API Summary ==========
/ *
DEVELOPER API ( v5 . 0.0 ) :
// Fork operations
brain . fork ( branch ? ) → Create instant clone
brain . asOf ( timestamp ) → Time - travel query ( Enterprise )
brain . rollback ( commitHash ) → Restore to commit ( Enterprise )
brain . commit ( options ? ) → Create commit ( automatic )
// Branch operations
brain . listBranches ( ) → List all branches
brain . checkout ( branch ) → Switch to branch
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>
2025-11-19 16:46:11 -08:00
brain . deleteBranch ( branch ) → Delete a branch
2025-11-01 11:56:11 -07:00
// Time queries
brain . getHistory ( limit ? ) → Get commit history
brain . findAtTime ( timestamp ) → Find commit at time
brain . getStats ( ) → Get storage stats
// All existing Brainy APIs work the same:
brain . add ( )
brain . find ( )
brain . search ( )
brain . vfs . *
brain . query ( ) // Triple Intelligence
ZERO CONFIG REQUIRED !
* /
// Run examples
if ( require . main === module ) {
basicFork ( )
. then ( ( ) = > console . log ( '✅ All examples complete' ) )
. catch ( console . error )
}