-
released this
2025-11-13 19:11:58 +01:00 | 574 commits to main since this releasev5.7.7: Production-Scale Lazy Loading + Documentation Updates
Critical Bug Fix
Fixed critical bug where
disableAutoRebuild: trueleft indexes empty forever, causingbrain.find()to return 0 results even when 1,000+ entities existed in storage.New Features
Production-Scale Lazy Loading (v5.7.7)
ensureIndexesLoaded()helper with concurrency control- Mutex prevents duplicate rebuilds from concurrent queries
- Zero-config: works automatically, no code changes needed
- Performance: 0-10ms init, 50-200ms first query, 0ms subsequent queries
Concurrency Safety:
- 100 concurrent queries = 1 rebuild (~60ms total)
- Mutex-based coordination prevents race conditions
Documentation Updates
Index Architecture Clarification:
- 3 main indexes + ~50+ sub-indexes accurately documented
- Added TypeAwareHNSWIndex with 42 type-specific indexes
- Documented MetadataIndexManager sub-components
- Documented GraphAdjacencyIndex with 4 LSM-trees
Lazy Loading Documentation:
- Mode 1 (Auto-Rebuild) vs Mode 2 (Lazy Loading) comparison
- Use cases for each mode (serverless, development, large datasets)
- Performance characteristics and benchmarks
Use Cases
Lazy Loading Benefits:
- Serverless/Edge: Minimize cold start time (0-10ms init)
- Development: Faster restarts during development
- Large datasets: Defer index loading until needed
- Read-heavy workloads: Writes don't wait for index rebuild
Workshop Team
This release specifically addresses the bug reported by the Workshop team where
brain.find({ limit: 900 })returned 0-5 results despite 1,173 entities in storage.Upgrade:
npm install @soulcraft/brainy@5.7.7No code changes needed - existing code will work automatically!
Full Changelog: https://github.com/soulcraftlabs/brainy/compare/v5.7.6...v5.7.7
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
released this
2025-11-13 18:02:56 +01:00 | 576 commits to main since this releaseNeural Entity Extraction API (v5.7.6)
Public API exports for Workshop team integration
New Exports
Classes:
NeuralEntityExtractor- Full extraction orchestratorSmartExtractor- Entity type classifier (4-signal ensemble)SmartRelationshipExtractor- Relationship type classifier
Method:
brain.extractEntities(text, options)- Primary extraction API
Subpath Imports:
import { SmartExtractor } from '@soulcraft/brainy/neural/SmartExtractor' import { SmartRelationshipExtractor } from '@soulcraft/brainy/neural/SmartRelationshipExtractor' import { NeuralEntityExtractor } from '@soulcraft/brainy/neural/entityExtractor'Features
- 🎯 4-Signal Ensemble - ExactMatch (40%) + Embedding (35%) + Pattern (20%) + Context (5%)
- 📊 Format Intelligence - Adapts to Excel, CSV, PDF, YAML, DOCX, JSON, Markdown
- ⚡ Fast - ~15-20ms per extraction with LRU caching
- 🌍 42 NounTypes - Person, Organization, Location, and 39 more
Documentation
- Comprehensive Guide:
docs/neural-extraction.md(600+ lines) - README Examples: Updated with extraction workflows
- API Reference: Complete interface documentation
Example
import { Brainy, NounType } from '@soulcraft/brainy' const brain = new Brainy() await brain.init() const entities = await brain.extractEntities( 'John Smith founded Acme Corp in New York', { confidence: 0.7 } ) // [ // { text: 'John Smith', type: NounType.Person, confidence: 0.95 }, // { text: 'Acme Corp', type: NounType.Organization, confidence: 0.92 }, // { text: 'New York', type: NounType.Location, confidence: 0.88 } // ]Full Changelog: See
CHANGELOG.mdDownloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
released this
2025-11-13 00:59:39 +01:00 | 579 commits to main since this releasev5.7.5 - Critical VFS Bug Fixes
URGENT UPDATE - Fixes two critical data corruption bugs in VFS file storage.
Critical Fixes
-
Blob integrity check failure (Workshop team finding)
- Root cause: COW adapter wraps binary data in JSON but doesn't unwrap on read
- Result: Hash calculated on JSON wrapper instead of original content → "Blob integrity check failed" error
- Fix: Unwrap
{_binary: true, data: "base64..."}objects before returning - Impact: 100% VFS file read failure since v5.0.0
-
Compression race condition (Claude Code investigation)
- Root cause:
BlobStorage.initCompression()is async but not awaited in constructor - Result: Files written before zstd loads are stored uncompressed with "compressed" metadata → corruption
- Fix: Added
ensureCompressionReady()to await init before first write - Impact: Files written in first 100-500ms after BlobStorage creation are corrupted
- Root cause:
Both bugs caused permanent file corruption in Workshop
Testing
✅ VFS write→read roundtrip test passes
✅ All 30 BlobStorage unit tests pass
✅ Build completes with zero errorsFiles Changed
src/storage/baseStorage.ts- Unwrap binary data in COW adaptersrc/storage/cow/BlobStorage.ts- Ensure compression ready before write
Upgrade Path
npm install @soulcraft/brainy@5.7.5All existing VFS files created with v5.7.0-v5.7.4 will now be readable.
Credit: Workshop team for detailed forensic analysis 🙏
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
-
v5.7.4 Stable
released this
2025-11-12 22:23:21 +01:00 | 581 commits to main since this releaseFull Changelog: https://github.com/soulcraftlabs/brainy/compare/v5.7.3...v5.7.4
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Source code (ZIP)
-
released this
2025-11-12 21:14:03 +01:00 | 583 commits to main since this release🎯 The REAL Fix for v5.7.x Race Condition
v5.7.2's write-through cache fixed the wrong layer. This release fixes the actual root cause: type cache synchronization.
What Was Wrong
The bug wasn't in the storage file I/O layer (where v5.7.2's cache operates). It was in the type cache layer (
nounTypeCache) which sits above the storage layer.The Race Condition
1. brain.addMany() creates 372 entities in parallel 2. nounTypeCache.set(id, type) populates cache [SYNC] 3. File writes happen async, Promise.allSettled() returns 4. v5.7.2 write cache cleared (~1ms lifetime) 5. brain.relateMany() IMMEDIATELY calls brain.get() 6. brain.get() → getNounMetadata() checks nounTypeCache 7. CACHE MISS → falls back to searching ALL 42 types 8. Write cache already cleared, file system read returns NULL 9. Error: "Source entity not found"The Three-Layer Fix
1. Explicit Flush (Immediate Fix)
// ImportCoordinator.ts line 1054 await this.brain.flush() // ← Forces all writes to complete- Guarantees file system consistency before relationships
- Simple, reliable, production-proven pattern
2. Type Cache Warming (Root Cause Fix)
// brainy.ts lines 1859-1877 // After addMany() completes, ensure nounTypeCache populated const cacheWarmingNeeded = result.successful.filter(id => !(this.storage as any).nounTypeCache?.has(id) ) await Promise.all(cacheWarmingNeeded.map(id => this.storage.getNounMetadata(id) ))- Prevents cache misses that trigger expensive 42-type fallback
- Eliminates root cause entirely
3. Extended Write-Through Cache (Safety Net)
// baseStorage.ts - Cache persists until flush() this.writeCache.set(branchPath, data) await this.writeObjectToPath(branchPath, data) // v5.7.3: Cache NOT cleared here anymore- Changed lifetime from ~1ms to entire batch operation
- Provides safety net for queries between batch write and flush
Why v5.7.2 Failed
v5.7.2's write-through cache operates at the storage FILE I/O layer, but the bug occurs at the TYPE CACHE layer which sits above storage. When
nounTypeCachehas a miss, it triggers a 42-type search fallback that happens AFTER the write-through cache is already cleared.Impact
✅ Fixes "Source entity not found" in v5.7.0/v5.7.1/v5.7.2
✅ 100% success rate on 372-entity PDF imports
✅ All 22 tests passing (15 existing + 7 new)
✅ Zero performance regression
✅ Drop-in replacement, backward compatibleTest Coverage
- 7 new integration tests: Exact bug scenarios from production
- 372-entity batch import with immediate relationships
- Concurrent batch operations with cross-batch relationships
- VFS structure generation after batch import
- 15 existing tests: All passing, no regressions
Upgrade Path
npm install @soulcraft/brainy@5.7.3No code changes required - the fix is automatic.
For Custom Import Code
If you have custom code that calls
brain.addMany()followed by immediate queries or relationships, consider adding an explicitawait brain.flush()between them for guaranteed consistency.Technical Details
Commits:
Files Modified:
- src/import/ImportCoordinator.ts: Added flush after addMany
- src/brainy.ts: Added type cache warming + flush cache clear
- src/storage/baseStorage.ts: Extended write-through cache lifetime
- tests/integration/batchImportWithRelations.test.ts: NEW (7 tests)
- tests/unit/storage/writeThroughCache.test.ts: Updated 1 test
Root Cause Analysis: See commit message for detailed technical analysis of the multi-layer race condition.
This is the REAL fix. v5.7.3 addresses the actual root cause that v5.7.2 missed.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
v5.7.2 - Race Condition Fix Stable
released this
2025-11-12 18:33:21 +01:00 | 585 commits to main since this release🐛 Critical Bug Fix
Resolves the critical race condition in v5.7.0/v5.7.1 where
brain.add()followed bybrain.relate()would fail with "Source entity not found" error.Problem
- v5.7.0 removed inline deduplication for 12-24x import speedup
- Exposed async write race condition: entities written weren't immediately queryable
- Caused PDF import failures and VFS structure generation errors
Solution
Write-through cache at storage layer (
baseStorage.ts):- Caches data during async writes (synchronous operation)
- Checks cache before disk reads (guarantees read-after-write consistency)
- Self-cleaning (cache clears after write completes)
- Zero-config, automatic for all 8 storage adapters
- Works with COW branch isolation
Impact
✅ Fixes PDF import failures in v5.7.0/v5.7.1
✅ Maintains 12-24x import speedup from v5.7.0
✅ Production-ready for billion-scale deployments
✅ Zero breaking changes, drop-in replacementTest Coverage
- 8 unit tests (write-through cache behavior)
- 7 integration tests (brain.add → brain.relate scenarios)
- 74 regression tests verified passing
Upgrade Path
npm install @soulcraft/brainy@5.7.2No code changes required - the fix is automatic at the storage layer.
Technical Details
Modified:
src/storage/baseStorage.ts- Added write-through cache (Map<string, any>)
- Modified
writeObjectToBranch()to cache during writes - Modified
readWithInheritance()to check cache first - Modified
deleteObjectFromBranch()to clear cache
Commit:
732d23bDownloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
released this
2025-11-12 00:25:52 +01:00 | 587 commits to main since this release🚨 CRITICAL HOTFIX - v5.7.0 Deadlock Fix
v5.7.0 caused complete production failure. ALL users should upgrade immediately.
Problem
v5.7.0 introduced a circular dependency deadlock that caused:
- ❌ ALL imports hung for 760+ seconds
- ❌
brain.add()took 12+ seconds per entity (50x slower) - ❌ Zero entities imported successfully
- ❌ 100% of users unable to use the library
Root Cause
Storage internals called GraphAdjacencyIndex during initialization:
GraphAdjacencyIndex.rebuild() → storage.getVerbs() storage.getVerbsBySource_internal() → getGraphIndex() getGraphIndex() → [waiting for rebuild] = DEADLOCKFix (Architectural)
Reverted storage internals to v5.6.3 implementation:
- ✅ Storage layer simple, no index dependencies
- ✅ GraphAdjacencyIndex can rebuild without circular calls
- ✅ Proper separation of concerns restored
- ✅ NO breaking changes
What's Changed
- fix: resolve v5.7.0 deadlock by restoring storage layer separation (
eb9af45) - test: added 4 regression tests for deadlock scenarios
- docs: comprehensive CHANGELOG with upgrade instructions
Testing
- ✅ All 1146 tests pass
- ✅ 4 new regression tests verify no deadlock
- ✅ Import + relationships complete in <1 second (not 760+)
- ✅ Build succeeds with zero errors
Upgrade NOW
npm install @soulcraft/brainy@5.7.1Expected after upgrade:
- ✅ Imports work again
- ✅ Fast entity creation (<100ms per entity)
- ✅ No hangs or infinite waits
- ✅ File operations responsive
Performance Impact
- Slightly slower GraphAdjacencyIndex initialization (one-time cost)
- High-level queries still use optimized index
- Import performance unaffected
- NO breaking changes to public API
Full Changelog: https://github.com/soulcraftlabs/brainy/compare/v5.7.0...v5.7.1
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
v5.7.0 Stable
released this
2025-11-11 23:20:55 +01:00 | 589 commits to main since this releaseFull Changelog: https://github.com/soulcraftlabs/brainy/compare/v5.6.3...v5.7.0
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Source code (ZIP)
-
v5.6.3 Stable
released this
2025-11-11 19:27:05 +01:00 | 592 commits to main since this releaseFull Changelog: https://github.com/soulcraftlabs/brainy/compare/v5.6.2...v5.6.3
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
-
Source code (ZIP)
-
v5.6.2 Stable
released this
2025-11-11 19:10:12 +01:00 | 595 commits to main since this releaseFull Changelog: https://github.com/soulcraftlabs/brainy/compare/v5.6.1...v5.6.2
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
Source code (ZIP)