brainy/docs/architecture/METADATA_ARCHITECTURE.md
David Snelling 0996c72468 feat: Brainy 3.0 - Production-ready Triple Intelligence database
Major improvements and simplifications:
- Simplified to Q8-only model precision (99% accuracy, 75% smaller)
- Removed WAL augmentation (not needed with modern filesystems)
- Eliminated all fake/stub code - 100% production-ready
- Added comprehensive cloud deployment support (Docker, K8s, AWS, GCP)
- Enhanced distributed system capabilities
- Improved Triple Intelligence find() implementation
- Added streaming pipeline for large-scale operations
- Comprehensive test coverage with new test suites

Breaking changes:
- Renamed BrainyData to Brainy (simpler, cleaner)
- Removed FP32 model option (Q8 provides 99% accuracy)
- Removed deprecated augmentations

Performance improvements:
- 10x faster initialization with Q8-only
- Reduced memory footprint by 75%
- Better scaling for millions of items

Co-Authored-By: Recovery checkpoint system
2025-09-11 16:23:32 -07:00

220 lines
No EOL
6 KiB
Markdown

# Brainy Metadata Architecture & Namespacing
## The Problem 🚨
We're mixing internal Brainy fields with user metadata, causing:
1. **Namespace collisions** - User's `deleted` field conflicts with our soft-delete
2. **API confusion** - Users see internal fields they shouldn't care about
3. **Security issues** - Users could manipulate internal fields
4. **Augmentation conflicts** - 3rd party augmentations might overwrite our fields
## Current Internal Fields Being Added
### Core System Fields
```javascript
metadata = {
// USER DATA
name: "Django",
type: "framework",
// OUR INTERNAL FIELDS - COLLISION RISK!
deleted: false, // Soft delete status
domain: "tech", // Distributed mode domain
domainMetadata: {}, // Domain-specific metadata
partition: 0, // Partition for sharding
createdAt: {...}, // GraphNoun timestamp
updatedAt: {...}, // GraphNoun timestamp
createdBy: {...}, // Who created this
noun: "Concept", // NounType
verb: "RELATES_TO", // VerbType (for relationships)
isPlaceholder: true, // Write-only mode marker
autoCreated: true, // Auto-created noun marker
writeOnlyMode: true // High-speed streaming marker
}
```
### Augmentation Fields
```javascript
// Good - neuralImport already uses underscore prefix!
metadata._neuralProcessed = true
metadata._neuralConfidence = 0.95
metadata._detectedEntities = 5
metadata._detectedRelationships = 3
metadata._neuralInsights = [...]
// Bad - direct modification
metadata.importance = 0.8 // IntelligentVerbScoring
```
## Proposed Solution: Three-Tier Metadata
### 1. User Metadata (Public)
```javascript
metadata = {
// User's fields - completely untouched
name: "Django",
type: "framework",
deleted: "2024-01-01", // User's own deleted field - no conflict!
domain: "web", // User's domain field - no conflict!
}
```
### 2. Internal Metadata (Protected)
```javascript
metadata._brainy = {
// Core system fields - O(1) indexed
deleted: false, // Our soft delete flag
version: 2, // Metadata schema version
// Distributed mode
partition: 0,
distributedDomain: "tech",
// GraphNoun compliance
nounType: "Concept",
verbType: "RELATES_TO",
createdAt: 1704067200000,
updatedAt: 1704067200000,
createdBy: "user:123",
// Performance flags
indexed: true,
searchable: true,
placeholder: false,
// Storage optimization
compressed: false,
encrypted: false
}
```
### 3. Augmentation Metadata (Semi-Protected)
```javascript
metadata._augmentations = {
// Each augmentation gets its own namespace
neuralImport: {
processed: true,
confidence: 0.95,
entities: 5,
relationships: 3
},
verbScoring: {
contextScore: 0.7,
importance: 0.8
},
// 3rd party augmentations
customAug: {
// Their fields isolated here
}
}
```
## Implementation Strategy
### Phase 1: Core Fields ✅
```javascript
// Already done with _brainy.deleted
const BRAINY_NAMESPACE = '_brainy'
const AUGMENTATION_NAMESPACE = '_augmentations'
```
### Phase 2: Migrate All Internal Fields
```javascript
// Before
metadata.domain = "tech"
metadata.partition = 0
// After
metadata._brainy.distributedDomain = "tech"
metadata._brainy.partition = 0
```
### Phase 3: Augmentation API
```javascript
class Augmentation {
// Read user metadata (read-only)
getUserMetadata(metadata) {
const { _brainy, _augmentations, ...userMeta } = metadata
return userMeta // Clean user data only
}
// Write augmentation data (isolated)
setAugmentationData(metadata, augName, data) {
if (!metadata._augmentations) metadata._augmentations = {}
metadata._augmentations[augName] = data
}
// Read internal fields (for special augmentations only)
getInternalField(metadata, field) {
return metadata._brainy?.[field]
}
}
```
## Benefits
1. **No Collisions** - User can have any field names
2. **O(1) Performance** - Internal fields still indexed
3. **Clean API** - Users only see their data
4. **Secure** - Internal fields protected
5. **Extensible** - Augmentations isolated
6. **Backward Compatible** - Migration path available
## Query Impact
### Before (Collision Risk)
```javascript
where: {
deleted: false, // Ambiguous - ours or user's?
type: "framework"
}
```
### After (Clear Separation)
```javascript
where: {
'_brainy.deleted': false, // Our soft delete
type: "framework" // User's field
}
```
## Performance Considerations
- **Index on `_brainy.deleted`**: O(1) hash lookup ✅
- **Index on `_brainy.partition`**: O(1) for sharding ✅
- **Nested field access**: Modern DBs handle this efficiently ✅
- **Storage overhead**: ~100 bytes per item (acceptable) ✅
## Migration Path
1. **New items**: Automatically use namespaced fields
2. **Existing items**: Lazy migration on update
3. **Queries**: Support both formats temporarily
4. **Deprecation**: Remove old format in v3.0
## Augmentation Guidelines
### For Core Augmentations
- Use `_brainy.*` for system fields
- Use `_augmentations.{name}.*` for augmentation data
- Never modify user fields directly
### For 3rd Party Augmentations
- Read user metadata via `getUserMetadata()`
- Write only to `_augmentations.{yourName}.*`
- Request permission for internal field access
## Critical Fields to Namespace
| Field | Current Location | New Location | Priority |
|-------|-----------------|--------------|----------|
| deleted | metadata.deleted | metadata._brainy.deleted | HIGH ✅ |
| partition | metadata.partition | metadata._brainy.partition | HIGH |
| domain | metadata.domain | metadata._brainy.distributedDomain | HIGH |
| createdAt | metadata.createdAt | metadata._brainy.createdAt | MEDIUM |
| updatedAt | metadata.updatedAt | metadata._brainy.updatedAt | MEDIUM |
| noun | metadata.noun | metadata._brainy.nounType | MEDIUM |
| verb | metadata.verb | metadata._brainy.verbType | MEDIUM |
| isPlaceholder | metadata.isPlaceholder | metadata._brainy.placeholder | LOW |
| autoCreated | metadata.autoCreated | metadata._brainy.autoCreated | LOW |