# Migrating to v5.11.1

## Overview

v5.11.1 introduces a **breaking change** with **massive performance benefits**:

- `brain.get()` now loads **metadata-only by default** (76-81% faster!)
- Vector embeddings require **explicit opt-in**: `{ includeVectors: true }`

**Impact**: Only ~6% of codebases need changes (code that computes similarity on retrieved entities).

## What Changed

### Before (v5.11.0 and earlier)

```typescript
const entity = await brain.get(id)
// entity.vector was ALWAYS loaded (384 dimensions, 6KB)
console.log(entity.vector.length)  // 384
```

### After (v5.11.1)

```typescript
// DEFAULT: Metadata-only (76-81% faster)
const entity = await brain.get(id)
console.log(entity.vector)  // [] (empty array - not loaded)

// EXPLICIT: Full entity with vectors
const entity = await brain.get(id, { includeVectors: true })
console.log(entity.vector.length)  // 384
```

## Who Needs to Update?

### ✅ NO CHANGES NEEDED (94% of code)

If you use `brain.get()` for:
- **VFS operations** (readFile, stat, readdir)
- **Existence checks**: `if (await brain.get(id))`
- **Metadata access**: `entity.data`, `entity.type`, `entity.metadata`
- **Relationship traversal**
- **Admin tools**, import utilities, data APIs

→ **Zero changes needed, automatic 76-81% speedup!**

### ⚠️ REQUIRES UPDATE (~6% of code)

If you use `brain.get()` AND then compute similarity on the returned entity:

```typescript
// ❌ BEFORE (v5.11.0) - will break in v5.11.1
const entity = await brain.get(id)
const similar = await brain.similar({ to: entity.vector })  // entity.vector is [] !

// ✅ AFTER (v5.11.1) - add includeVectors
const entity = await brain.get(id, { includeVectors: true })
const similar = await brain.similar({ to: entity.vector })  // Works!
```

**Note**: `brain.similar({ to: entityId })` (using ID) still works - no changes needed!

## Migration Steps

### Step 1: Find Affected Code

Search your codebase for patterns that use vectors from `brain.get()`:

```bash
# Find brain.get() calls that access .vector
grep -r "await brain.get(" --include="*.ts" --include="*.js" | \
  grep -E "(\.vector|entity\.vector)"
```

### Step 2: Update Pattern-by-Pattern

#### Pattern 1: Similarity Using Retrieved Entity Vector

```typescript
// ❌ BEFORE
const entity = await brain.get(id)
const similar = await brain.similar({ to: entity.vector })

// ✅ AFTER - Option A: Add includeVectors
const entity = await brain.get(id, { includeVectors: true })
const similar = await brain.similar({ to: entity.vector })

// ✅ AFTER - Option B: Use ID directly (recommended)
const similar = await brain.similar({ to: id })
```

#### Pattern 2: Manual Vector Operations

```typescript
// ❌ BEFORE
const entity = await brain.get(id)
const magnitude = Math.sqrt(entity.vector.reduce((sum, v) => sum + v*v, 0))

// ✅ AFTER
const entity = await brain.get(id, { includeVectors: true })
const magnitude = Math.sqrt(entity.vector.reduce((sum, v) => sum + v*v, 0))
```

#### Pattern 3: Vector Assertions in Tests

```typescript
// ❌ BEFORE
const entity = await brain.get(id)
expect(entity.vector).toBeDefined()
expect(entity.vector.length).toBe(384)

// ✅ AFTER
const entity = await brain.get(id, { includeVectors: true })
expect(entity.vector).toBeDefined()
expect(entity.vector.length).toBe(384)
```

### Step 3: Verify Migration

Run your test suite to catch any remaining issues:

```bash
npm test
```

Look for errors like:
- `entity.vector is empty` or `entity.vector.length is 0`
- `Cannot compute similarity on empty vector`

Add `{ includeVectors: true }` wherever these errors occur.

## Performance Impact

### Before Migration
```
brain.get(): 43ms, 6KB per call
VFS readFile(): 53ms per file
VFS readdir(100 files): 5.3s
```

### After Migration
```
brain.get(): 10ms, 300 bytes per call (76-81% faster) ✨
brain.get({ includeVectors: true }): 43ms, 6KB (unchanged)
VFS readFile(): ~13ms per file (75% faster) ✨
VFS readdir(100 files): ~1.3s (75% faster) ✨
```

**Result**:
- VFS operations: **75% faster**
- Metadata access: **76-81% faster**
- Vector similarity: **Unchanged** (still fast when needed)

## TypeScript Support

The new `GetOptions` interface is fully typed:

```typescript
interface GetOptions {
  /**
   * Include 384-dimensional vector embeddings in the response
   *
   * Default: false (metadata-only for 76-81% speedup)
   */
  includeVectors?: boolean
}

// TypeScript will autocomplete and validate
const entity = await brain.get(id, { includeVectors: true })
```

## Rollback Plan

If you encounter issues, you can temporarily force full entity loading everywhere:

```typescript
// Temporary wrapper (NOT RECOMMENDED - defeats optimization)
async function getLegacy(id: string) {
  return brain.get(id, { includeVectors: true })
}

// Use throughout codebase while migrating
const entity = await getLegacy(id)
```

**Important**: This defeats the 76-81% performance improvement. Only use temporarily while fixing affected code.

## FAQ

### Q: Why did you make this a breaking change?

**A**: The performance gains are massive (76-81% speedup, 95% less bandwidth) and affect 94% of code positively. Only ~6% of code needs updates. The net benefit is enormous.

### Q: Do I need to update my VFS code?

**A**: No! VFS automatically benefits from the optimization with zero code changes. Your VFS operations are now 75% faster automatically.

### Q: Will brain.similar() still work?

**A**: Yes! `brain.similar({ to: entityId })` works exactly as before. Only `brain.similar({ to: entity.vector })` requires the entity to be loaded with `{ includeVectors: true }`.

### Q: What about backward compatibility?

**A**: Entities returned without vectors have `vector: []` (empty array), which is type-safe. Code that doesn't use vectors continues to work. Only code that explicitly uses `entity.vector` needs updating.

### Q: Can I check if vectors are loaded?

**A**: Yes! Check `entity.vector.length > 0` to detect if vectors were loaded.

```typescript
const entity = await brain.get(id)
if (entity.vector.length > 0) {
  // Vectors are loaded
} else {
  // Metadata-only
}
```

## Support

If you encounter migration issues:

1. Check the [VFS Performance Guide](../vfs/VFS_PERFORMANCE.md)
2. Review [API Reference](../api/README.md)
3. See [Performance Documentation](../PERFORMANCE.md)
4. File an issue: https://github.com/soulcraft/brainy/issues

## Changelog

See [CHANGELOG.md](../../CHANGELOG.md) for complete v5.11.1 release notes.
