chore: recovery checkpoint - v3.0 API successfully recovered
CRITICAL CHECKPOINT - DO NOT PUSH TO GITHUB Recovery Status: - Successfully recovered brainy.ts from compiled JavaScript - All core v3.0 API methods functional (add, get, update, delete, relate, find, etc.) - Neural subsystem intact (562KB embedded patterns, NLP working) - Augmentation pipeline operational (20+ augmentations) - HNSW clustering system complete - Triple Intelligence compiled (needs constructor fix) - Test suite validates functionality Changes preserved: - 898 files with changes from last 3 days - 144,475 insertions - All augmentation improvements - All test coverage enhancements - Complete v3.0 feature set This is a LOCAL checkpoint only - contains recovered work after corruption incident. Created backup in .backups/brainy-full-20250910-151314.tar.gz Branch: recovery-checkpoint-20250910-151433 Date: Wed Sep 10 03:18:04 PM PDT 2025
This commit is contained in:
parent
f65455fb22
commit
8ff382ca3b
895 changed files with 143654 additions and 28268 deletions
|
|
@ -0,0 +1,98 @@
|
|||
/**
|
||||
* Dedicated index for tracking soft-deleted items
|
||||
* This is MUCH more efficient than checking every item in the database
|
||||
*
|
||||
* Performance characteristics:
|
||||
* - Add deleted item: O(1)
|
||||
* - Remove deleted item: O(1)
|
||||
* - Check if deleted: O(1)
|
||||
* - Get all deleted: O(d) where d = number of deleted items << total items
|
||||
*/
|
||||
export class DeletedItemsIndex {
|
||||
constructor() {
|
||||
this.deletedIds = new Set();
|
||||
this.deletedCount = 0;
|
||||
}
|
||||
/**
|
||||
* Mark an item as deleted
|
||||
*/
|
||||
markDeleted(id) {
|
||||
if (!this.deletedIds.has(id)) {
|
||||
this.deletedIds.add(id);
|
||||
this.deletedCount++;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Mark an item as not deleted (restored)
|
||||
*/
|
||||
markRestored(id) {
|
||||
if (this.deletedIds.delete(id)) {
|
||||
this.deletedCount--;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Check if an item is deleted - O(1)
|
||||
*/
|
||||
isDeleted(id) {
|
||||
return this.deletedIds.has(id);
|
||||
}
|
||||
/**
|
||||
* Get all deleted item IDs - O(d)
|
||||
*/
|
||||
getAllDeleted() {
|
||||
return Array.from(this.deletedIds);
|
||||
}
|
||||
/**
|
||||
* Filter out deleted items from results - O(k) where k = result count
|
||||
*/
|
||||
filterDeleted(items) {
|
||||
if (this.deletedCount === 0) {
|
||||
// Fast path - no deleted items
|
||||
return items;
|
||||
}
|
||||
return items.filter(item => {
|
||||
const id = item.id;
|
||||
return id ? !this.deletedIds.has(id) : true;
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Get statistics
|
||||
*/
|
||||
getStats() {
|
||||
return {
|
||||
deletedCount: this.deletedCount,
|
||||
memoryUsage: this.deletedCount * 100 // Rough estimate: 100 bytes per ID
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Clear all deleted items (for testing)
|
||||
*/
|
||||
clear() {
|
||||
this.deletedIds.clear();
|
||||
this.deletedCount = 0;
|
||||
}
|
||||
/**
|
||||
* Serialize for persistence
|
||||
*/
|
||||
serialize() {
|
||||
return JSON.stringify(Array.from(this.deletedIds));
|
||||
}
|
||||
/**
|
||||
* Deserialize from persistence
|
||||
*/
|
||||
deserialize(data) {
|
||||
try {
|
||||
const ids = JSON.parse(data);
|
||||
this.deletedIds = new Set(ids);
|
||||
this.deletedCount = this.deletedIds.size;
|
||||
}
|
||||
catch (e) {
|
||||
console.warn('Failed to deserialize deleted items index');
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Global singleton for deleted items tracking
|
||||
*/
|
||||
export const deletedItemsIndex = new DeletedItemsIndex();
|
||||
//# sourceMappingURL=deletedItemsIndex.js.map
|
||||
Loading…
Add table
Add a link
Reference in a new issue