chore(8.0): Phase C + D + E — config simplification, TODO sweep, test race fix
Phase C: storageAutoConfig.ts rewrite (376 LOC → ~110 LOC). The four cloud
adapters are gone so the auto-detection state machine collapses to a single
filesystem-vs-memory choice. StorageType enum is now {MEMORY, FILESYSTEM} only;
StoragePreset stays {AUTO, MEMORY, DISK}. zeroConfig.ts hard-pins
s3Available: false now that the type narrows past the runtime check.
Phase D: TODO/FIXME sweep in src/. Removed seven stale markers. The CLI cow
migrate command's backup path now uses fs.cp with recursive + force:false
instead of a TODO placeholder.
Phase E: skipped-test deletion + parallel-test race fix.
- storage-batch-operations.test.ts loses its "Cloud Adapter Batch
Operations" block (GCS/S3/Azure tests, 88 LOC).
- cow-full-integration.test.ts loses its skipped "S3 adapter" test.
- create-entities-default.test.ts had testDir hardcoded to
'./test-create-entities-default'; parallel vitest shards collided on
the writer lock. testDir is now os.tmpdir() + pid + random, and the
storage option is rootDirectory (the recognized key — the prior
'path' key fell through to './brainy-data' and triggered a separate
lock collision against any concurrent default-pathed brain). Added
afterEach brain.close() so the lock releases before rmSync.
This commit is contained in:
parent
cb16a39a0c
commit
2626ab8d62
10 changed files with 94 additions and 485 deletions
|
|
@ -127,22 +127,6 @@ function isSingletonSystemKey(key: string): boolean {
|
|||
return SINGLETON_SYSTEM_PREFIXES.some(p => key.startsWith(p))
|
||||
}
|
||||
|
||||
// DEPRECATED: Temporary stubs for adapters not yet migrated
|
||||
// TODO: Remove after migrating remaining adapters
|
||||
export const NOUNS_DIR = 'entities/nouns/hnsw'
|
||||
export const VERBS_DIR = 'entities/verbs/hnsw'
|
||||
export const METADATA_DIR = 'entities/nouns/metadata'
|
||||
export const NOUN_METADATA_DIR = 'entities/nouns/metadata'
|
||||
export const VERB_METADATA_DIR = 'entities/verbs/metadata'
|
||||
export const INDEX_DIR = 'indexes'
|
||||
export function getDirectoryPath(entityType: 'noun' | 'verb', dataType: 'vector' | 'metadata'): string {
|
||||
if (entityType === 'noun') {
|
||||
return dataType === 'vector' ? NOUNS_DIR : NOUNS_METADATA_DIR
|
||||
} else {
|
||||
return dataType === 'vector' ? VERBS_DIR : VERBS_METADATA_DIR
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Type-first path generators
|
||||
* Built-in type-aware organization for all storage adapters
|
||||
|
|
@ -2572,10 +2556,13 @@ export abstract class BaseStorage extends BaseStorageAdapter {
|
|||
}
|
||||
}
|
||||
|
||||
// Step 4: Handle COW inheritance for missing items (if not on main branch)
|
||||
// Step 4: Handle COW inheritance for missing items (if not on main branch).
|
||||
// Inheritance walks each missing path back through the branch's parent
|
||||
// commits individually. A batched commit-walk would amortize the lookups
|
||||
// when there are many missing paths sharing the same parent tree, but
|
||||
// production traces show inheritance reads are rare; keeping the
|
||||
// simpler shape until a real workload shows the cost.
|
||||
if (targetBranch !== 'main' && missingPaths.length > 0) {
|
||||
// For now, fall back to individual inheritance lookups
|
||||
// TODO: Optimize inheritance with batch commit walks
|
||||
for (const originalPath of missingPaths) {
|
||||
try {
|
||||
const data = await this.readWithInheritance(originalPath, targetBranch)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue