brainy/tests
David Snelling ff86e88e53 fix: add mutex locks to FileSystemStorage for HNSW concurrency (CRITICAL)
PRODUCTION BLOCKER: Workshop team reported data corruption at 450+ entities
during bulk imports (1400 files) with 1000+ concurrent operations.

## Root Cause

FileSystemStorage lacked mutex locks for HNSW operations, causing
read-modify-write race conditions at production scale. Memory and OPFS
adapters already had mutex locks (v4.9.2), but FileSystemStorage only
had atomic rename which prevents torn writes but NOT lost updates.

## The Race Condition

Without mutex, concurrent operations on same entity:
1. Thread A reads file (connections: [1,2,3])
2. Thread B reads file (connections: [1,2,3])
3. Thread A adds connection 4, writes [1,2,3,4]
4. Thread B adds connection 5, writes [1,2,3,5] ← Connection 4 LOST

Result: Corrupted HNSW graph, lost connections, undefined entity IDs

## Why Previous Fixes Failed

v4.9.2: Added atomic rename (prevents torn writes, NOT lost updates)
v4.10.0: Made problem worse by increasing concurrency without mutex

## The Fix

Added mutex locks to FileSystemStorage matching Memory/OPFS (v4.9.2):
- fileSystemStorage.ts:90 - Added hnswLocks Map
- fileSystemStorage.ts:2609-2626 - Mutex wraps saveHNSWData()
- fileSystemStorage.ts:2719-2731 - Mutex wraps saveHNSWSystem()

Mutex serializes concurrent operations PER ENTITY while maintaining
atomic rename for crash safety.

## Workshop Bug Symptoms (Now Fixed)

1. Entity IDs undefined (300+ errors) - Fixed by preventing data loss
2. JSON truncation at 8KB (position 8192) - Fixed by serializing writes
3. Field index lock contention (100+ indexes) - Fixed by preventing corruption cascade
4. Corruption starts at ~450 entities - Fixed by handling hub node contention

## Test Coverage

Added 3 production-scale tests (hnswConcurrency.test.ts:533-688):
- 1000 concurrent saveHNSWData() on shared hub node (Workshop scenario)
- 500 entity corruption threshold test (crosses 450-entity limit)
- 100 concurrent system updates (entry point changes)

Test results: 16/16 passing
- 1000 concurrent ops: 177ms, 0 errors
- 500 entities: 0 undefined IDs, 0 corrupted data, 0 truncation
- All production-scale scenarios pass

## Evidence

Workshop bug report: brain-cloud/apps/workshop/BRAINY_V4.9.2_HNSW_CONCURRENCY_BUG_REPORT.md
Test Gap: Previous tests used 20 concurrent ops vs 1000 in production (50× difference)
Fix Pattern: Matches memoryStorage.ts:828 and opfsStorage.ts:2033 mutex implementation

## Breaking Changes

None - fully backward compatible

## Migration

No migration needed. Existing data compatible. For corrupted v4.9.2 data,
recommend clean slate re-import for guaranteed consistency.
2025-10-29 16:48:07 -07:00
..
api feat: Brainy 3.0 - Production-ready Triple Intelligence database 2025-09-11 16:23:32 -07:00
augmentations/intelligentImport feat: add intelligent import for CSV, Excel, and PDF files 2025-10-01 16:51:03 -07:00
benchmarks feat: remove legacy ImportManager, standardize getStats() API 2025-10-09 11:40:31 -07:00
comprehensive fix: resolve 10 test failures across clustering, metadata, and deletion 2025-10-09 16:33:08 -07:00
configs 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
fixtures/import feat: add intelligent import for CSV, Excel, and PDF files 2025-10-01 16:51:03 -07:00
helpers feat: Brainy 3.0 - Triple Intelligence Release 2025-09-15 11:06:16 -07:00
integration test: comprehensive tests for remaining APIs (17/17 passing) 2025-10-24 12:59:41 -07:00
manual test: add comprehensive API verification tests (21/25 passing) 2025-10-24 12:09:42 -07:00
performance docs: remove exaggerated performance claims and add honest benchmarks 2025-10-28 09:54:01 -07:00
scripts feat: Brainy 3.0 - Production-ready Triple Intelligence database 2025-09-11 16:23:32 -07:00
unit fix: add mutex locks to FileSystemStorage for HNSW concurrency (CRITICAL) 2025-10-29 16:48:07 -07:00
vfs fix: resolve 10 test failures across clustering, metadata, and deletion 2025-10-09 16:33:08 -07:00
brainy-3.test.ts fix: resolve 10 test failures across clustering, metadata, and deletion 2025-10-09 16:33:08 -07:00
critical-error-handling.test.ts feat: Brainy 3.0 - Production-ready Triple Intelligence database 2025-09-11 16:23:32 -07:00
critical-neural-validation.test.ts feat: Brainy 3.0 - Production-ready Triple Intelligence database 2025-09-11 16:23:32 -07:00
critical-performance-benchmark.test.ts feat: Brainy 3.0 - Production-ready Triple Intelligence database 2025-09-11 16:23:32 -07:00
distributed-demo.test.ts feat: Brainy 3.0 - Production-ready Triple Intelligence database 2025-09-11 16:23:32 -07:00
model-loading.test.ts 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
opfs-storage.test.ts 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
package-size-breakdown.test.ts 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
package-size-limit.test.ts 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
setup-integration.ts 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
setup-unit.ts 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
setup.ts 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
streaming-pipeline.test.ts feat: Brainy 3.0 - Production-ready Triple Intelligence database 2025-09-11 16:23:32 -07:00
type-utils.test.ts 🧠 Brainy 2.0.0 - Zero-Configuration AI Database with Triple Intelligence™ 2025-08-26 12:32:21 -07:00
typeAwareHNSWIndex.test.ts feat: Phase 2 Type-Aware HNSW - 87% memory reduction @ billion scale 2025-10-15 15:39:28 -07:00
typeAwareQueryPlanner.test.ts feat: Phase 3 - Unified Semantic Type Inference (Nouns + Verbs) 2025-10-16 10:59:26 -07:00