• v5.10.2 73557a53c6

    v5.10.2 Stable

    dpsifr released this 2025-11-15 01:12:46 +01:00 | 551 commits to main since this release

    Downloads
  • v5.10.1 9a8b7a6cd4

    dpsifr released this 2025-11-15 00:31:13 +01:00 | 553 commits to main since this release

    🚨 CRITICAL HOTFIX - Blob Integrity Regression

    v5.10.0 regressed the v5.7.2 blob integrity bug, causing 100% VFS file read failure. This hotfix restores functionality with defense-in-depth architecture.

    Problem Fixed

    • Symptom: Blob integrity check failed: <hash> errors on every VFS file read
    • Root Cause: Missing defense-in-depth unwrap verification in BlobStorage.read()
    • Impact: 100% failure rate for VFS file operations in Workshop application

    The Solution (v5.10.1)

    1. Defense-in-Depth Architecture

    • Unwrap at BOTH layers: adapter (v5.7.5) AND blob layer (v5.10.1)
    • Works even if adapter fails to unwrap or is buggy
    • Metadata also unwrapped before parsing

    2. DRY Principle - Single Source of Truth

    • Created binaryDataCodec.ts as single source of truth
    • All wrap/unwrap operations use shared utilities
    • Works across ALL 8 storage adapters

    3. Comprehensive Testing

    • Created TestWrappingAdapter.ts that actually wraps data like production
    • Added 3 regression tests that would have caught this bug
    • All tests pass ✓

    Files Modified

    NEW:

    • src/storage/cow/binaryDataCodec.ts - Single source of truth for binary encoding/decoding
    • tests/helpers/TestWrappingAdapter.ts - Real wrapping adapter for testing

    FIXED:

    • src/storage/cow/BlobStorage.ts:314,342 - Defense-in-depth unwrap for metadata & data
    • src/storage/baseStorage.ts:332,340 - Uses shared binaryDataCodec utilities
    • tests/unit/storage/cow/BlobStorage.test.ts:513-610 - 3 regression tests

    Architecture Improvements

    • Defense-in-Depth: Unwrap at BOTH adapter and blob layers
    • DRY Principle: All wrap/unwrap operations use shared binaryDataCodec.ts
    • Works Across ALL 8 Storage Adapters: FileSystem, Memory, S3, GCS, Azure, R2, OPFS, Historical
    • Prevents Future Regressions: Real wrapping tests catch this bug class
    • v5.7.2: Original blob integrity bug - hashed wrapper instead of content
    • v5.7.5: First fix - added unwrap to COW adapter (necessary but insufficient)
    • v5.10.0: Regression - missing defense-in-depth in BlobStorage layer
    • v5.10.1: Complete fix - defense-in-depth + DRY architecture + comprehensive tests

    Installation

    npm install @soulcraft/brainy@5.10.1
    

    Verification

    • Build: Zero TypeScript errors
    • Tests: All 3 regression tests pass
    • Architecture: DRY, defense-in-depth, works across all adapters
    Downloads
  • v5.10.0 50ece5e179

    dpsifr released this 2025-11-14 21:57:01 +01:00 | 554 commits to main since this release

    Downloads
  • v5.9.0 c4acc83a58

    v5.9.0 Stable

    dpsifr released this 2025-11-14 20:46:44 +01:00 | 557 commits to main since this release

    Downloads
  • v5.7.13 865d8e432b

    v5.7.13 Stable

    dpsifr released this 2025-11-14 02:09:45 +01:00 | 562 commits to main since this release

    Downloads
  • v5.7.12 3296c75edf

    dpsifr released this 2025-11-13 23:54:17 +01:00 | 564 commits to main since this release

    Downloads
  • v5.7.11 bb9306d3f8

    dpsifr released this 2025-11-13 23:21:23 +01:00 | 566 commits to main since this release

    Downloads
  • v5.7.10 6cbb3f3a8d

    dpsifr released this 2025-11-13 20:56:43 +01:00 | 568 commits to main since this release

    Downloads
  • v5.7.9 e226e2bc44

    v5.7.9 Stable

    dpsifr released this 2025-11-13 20:08:00 +01:00 | 570 commits to main since this release

    Downloads
  • v5.7.8 4c1b60e2b1

    dpsifr released this 2025-11-13 19:46:11 +01:00 | 572 commits to main since this release

    v5.7.8: CRITICAL HOTFIX - HNSW Connections Deserialization

    Critical Bug Fixed

    Fixed "noun.connections.entries is not a function" error reported by Workshop team when using v5.7.7 with lazy loading.

    Root Cause

    When HNSW data was loaded from JSON storage via getNounsWithPagination(), the connections field (which should be Map<number, Set<string>>) was deserialized as a plain JavaScript object {}. Subsequent code that expected a Map with .entries() method would crash.

    The Fix

    Added defensive deserialization in baseStorage.ts:1156-1168 to reconstruct the Map and Sets from plain objects when loading from storage:

    // v5.7.8: Convert connections from plain object to Map (JSON deserialization fix)
    const connections = new Map<number, Set<string>>()
    if (noun.connections && typeof noun.connections === 'object') {
      for (const [levelStr, ids] of Object.entries(noun.connections)) {
        if (Array.isArray(ids)) {
          connections.set(parseInt(levelStr, 10), new Set<string>(ids))
        }
      }
    }
    

    Impact

    • Fixes HNSW index rebuild failures
    • Workshop team can now use v5.7.7+ lazy loading without crashes
    • All existing data formats supported (defensive checks)
    • No data migration required

    Upgrade

    npm install @soulcraft/brainy@5.7.8
    

    No code changes needed - existing applications work automatically.

    For Workshop Team

    This fixes the blocking issue you reported. The lazy loading feature from v5.7.7 will now work correctly with your existing data.

    Testing:

    • Build: PASS
    • Unit tests: PASS (1,032/1,032 tests)
    • Published: npm @soulcraft/brainy@5.7.8

    Full Changelog: https://github.com/soulcraftlabs/brainy/compare/v5.7.7...v5.7.8

    Downloads