chore(8.0): final pre-RC1 sweep — API consistency, named errors, orphans, zero-cast codebase
This commit is contained in:
parent
970e08c466
commit
1f7e365a4e
237 changed files with 1951 additions and 49413 deletions
|
|
@ -1,7 +1,7 @@
|
|||
/**
|
||||
* Regression tests: metadata index cleanup after delete / deleteMany
|
||||
* Regression tests: metadata index cleanup after remove / removeMany
|
||||
*
|
||||
* Bug report (wickworks): brain.deleteMany() was not removing metadata index
|
||||
* Bug report (wickworks): brain.removeMany() was not removing metadata index
|
||||
* entries for deleted entities. The same defect also existed in delete().
|
||||
*
|
||||
* Root causes fixed:
|
||||
|
|
@ -22,7 +22,7 @@
|
|||
* Fix: entityForIndexing now uses the same conditional spreading pattern as
|
||||
* storageMetadata for confidence, weight, and createdBy.
|
||||
*
|
||||
* 3. result.successful updated inside transaction builder — deleteMany() pushed
|
||||
* 3. result.successful updated inside transaction builder — removeMany() pushed
|
||||
* ids to result.successful during the builder phase, before transaction.execute()
|
||||
* ran. A transaction rollback would leave result.successful containing ids that
|
||||
* were never actually deleted.
|
||||
|
|
@ -39,7 +39,7 @@ const DIM = 384
|
|||
const makeVec = (seed = 1) =>
|
||||
new Float32Array(DIM).map((_, i) => ((i + seed) % DIM) / DIM)
|
||||
|
||||
describe('Metadata index cleanup after delete / deleteMany', () => {
|
||||
describe('Metadata index cleanup after remove / removeMany', () => {
|
||||
let brain: Brainy
|
||||
|
||||
beforeEach(async () => {
|
||||
|
|
@ -80,7 +80,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
describe('delete()', () => {
|
||||
it('removes entity from type index so find({ type }) returns 0', async () => {
|
||||
const id = await addEntity({ type: 'product' })
|
||||
await brain.delete(id)
|
||||
await brain.remove(id)
|
||||
|
||||
const results = await brain.find({ type: 'product' as any })
|
||||
expect(results).toHaveLength(0)
|
||||
|
|
@ -90,7 +90,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
// Add one entity with service 'alpha', delete it.
|
||||
// A ne:'beta' query should return 0, not the deleted entity.
|
||||
const id = await addEntity({ service: 'alpha', type: 'thing' })
|
||||
await brain.delete(id)
|
||||
await brain.remove(id)
|
||||
|
||||
const results = await brain.find({ where: { service: { ne: 'beta' } } })
|
||||
const ids = results.map(r => r.id)
|
||||
|
|
@ -101,7 +101,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
// Entity added without a custom 'archivedAt' field.
|
||||
// After deletion it must not appear in an exists:false query.
|
||||
const id = await addEntity({ type: 'thing' })
|
||||
await brain.delete(id)
|
||||
await brain.remove(id)
|
||||
|
||||
const results = await brain.find({ where: { archivedAt: { exists: false } } })
|
||||
const ids = results.map(r => r.id)
|
||||
|
|
@ -110,10 +110,10 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
})
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// deleteMany() — batch deletion
|
||||
// removeMany() — batch deletion
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
describe('deleteMany()', () => {
|
||||
describe('removeMany()', () => {
|
||||
it('removes all entities from type index so find({ type }) returns 0', async () => {
|
||||
const ids = await Promise.all([
|
||||
addEntity({ type: 'concept' }),
|
||||
|
|
@ -121,7 +121,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
addEntity({ type: 'concept' }),
|
||||
])
|
||||
|
||||
await brain.deleteMany({ ids })
|
||||
await brain.removeMany({ ids })
|
||||
|
||||
const results = await brain.find({ type: 'concept' as any, limit: 50 })
|
||||
expect(results).toHaveLength(0)
|
||||
|
|
@ -140,7 +140,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
addEntity({ service: 'beta', type: 'thing' }),
|
||||
])
|
||||
|
||||
await brain.deleteMany({ ids: alphaIds })
|
||||
await brain.removeMany({ ids: alphaIds })
|
||||
|
||||
const results = await brain.find({ where: { service: { ne: 'beta' } } })
|
||||
const resultIds = results.map(r => r.id)
|
||||
|
|
@ -168,7 +168,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
// One surviving entity also without closedAt — it SHOULD appear in results
|
||||
const survivorId = await addEntity({ type: 'thing', metadata: { region: 'us', active: true } })
|
||||
|
||||
await brain.deleteMany({ ids: deletedIds })
|
||||
await brain.removeMany({ ids: deletedIds })
|
||||
|
||||
const results = await brain.find({ where: { closedAt: { exists: false } } })
|
||||
const resultIds = results.map(r => r.id)
|
||||
|
|
@ -189,7 +189,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
addEntity({ type: 'thing' }),
|
||||
])
|
||||
|
||||
const result = await brain.deleteMany({ ids })
|
||||
const result = await brain.removeMany({ ids })
|
||||
|
||||
// All should succeed — verify successful list is correct
|
||||
expect(result.successful).toHaveLength(ids.length)
|
||||
|
|
@ -206,7 +206,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
})
|
||||
|
||||
it('handles empty ids array gracefully', async () => {
|
||||
const result = await brain.deleteMany({ ids: [] })
|
||||
const result = await brain.removeMany({ ids: [] })
|
||||
expect(result.successful).toHaveLength(0)
|
||||
expect(result.failed).toHaveLength(0)
|
||||
})
|
||||
|
|
@ -217,7 +217,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
Array.from({ length: 25 }, (_, i) => addEntity({ type: 'document', metadata: { i } }))
|
||||
)
|
||||
|
||||
const result = await brain.deleteMany({ ids })
|
||||
const result = await brain.removeMany({ ids })
|
||||
|
||||
expect(result.successful).toHaveLength(25)
|
||||
expect(result.failed).toHaveLength(0)
|
||||
|
|
@ -267,7 +267,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
// After deletion the confidence/__NULL__ and weight/__NULL__ bitmap entries
|
||||
// (if any were created) must not be surfaced through any query.
|
||||
const id = await addEntity({ type: 'thing' })
|
||||
await brain.delete(id)
|
||||
await brain.remove(id)
|
||||
|
||||
// Entity must not appear in any confidence query
|
||||
const existsTrue = await brain.find({ where: { confidence: { exists: true } } })
|
||||
|
|
@ -282,7 +282,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
// Survivors are unaffected
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
describe('partial deleteMany does not affect surviving entities', () => {
|
||||
describe('partial removeMany does not affect surviving entities', () => {
|
||||
it('surviving entities remain queryable after deleting others of the same type', async () => {
|
||||
const toDelete = await Promise.all([
|
||||
addEntity({ type: 'collection', metadata: { group: 'a' } }),
|
||||
|
|
@ -294,7 +294,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
addEntity({ type: 'collection', metadata: { group: 'b' } }),
|
||||
])
|
||||
|
||||
await brain.deleteMany({ ids: toDelete })
|
||||
await brain.removeMany({ ids: toDelete })
|
||||
|
||||
const results = await brain.find({ type: 'collection' as any, limit: 50 })
|
||||
const resultIds = results.map(r => r.id)
|
||||
|
|
@ -315,7 +315,7 @@ describe('Metadata index cleanup after delete / deleteMany', () => {
|
|||
const b = await addEntity({ type: 'task', service: 'svc' })
|
||||
const c = await addEntity({ type: 'task', service: 'svc' })
|
||||
|
||||
await brain.delete(a)
|
||||
await brain.remove(a)
|
||||
|
||||
const results = await brain.find({ type: 'task' as any, limit: 50 })
|
||||
const ids = results.map(r => r.id)
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ describe('v5.7.0 Deadlock Regression', () => {
|
|||
const start = Date.now()
|
||||
|
||||
// Force GraphAdjacencyIndex usage by querying relationships
|
||||
const relations = await brain.getRelations({ from: entities[0] })
|
||||
const relations = await brain.related({ from: entities[0] })
|
||||
|
||||
const elapsed = Date.now() - start
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ describe('v5.7.0 Deadlock Regression', () => {
|
|||
const start = Date.now()
|
||||
|
||||
// This would trigger initialization if not already done
|
||||
const relations = await brain.getRelations({ from: entity1 })
|
||||
const relations = await brain.related({ from: entity1 })
|
||||
|
||||
const elapsed = Date.now() - start
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue