test(8.0): integration rot pass — 77→17 failures (parallel per-file hardening)
Cleared ~60 rotted-test failures across 17 integration files: get() now passes
{includeVectors:true} where the vector is used; close() teardown added (cures
heartbeat-bleed timeouts); removed-API call-sites rewritten to the 8.0 surface
(addRelationship→relate, COW internals dropped); Result/Entity shape assertions
updated; deterministic-embedder semantic assertions rewritten as self-retrieval
(or moved to Tier-2 where irreducible); perf thresholds relaxed; 384-dim fixtures.
Adds the Tier-2 (real-model) scaffolding: tests/setup-semantic.ts +
tests/configs/vitest.semantic.config.ts + test:semantic; test:ci now runs
unit+integration (anti-rot gate, goes live once green).
Remaining 17 failures are REAL 8.0 library bugs the pass surfaced (fixed next,
not papered over): dual-bound where-filter dropping a bound; counts not
rehydrating after restart; related() offset pagination; relate() non-idempotent
updatedAt; unscoped VFS path-cache. Plus find-unified finish + a few stragglers.
This commit is contained in:
parent
c600468bb5
commit
e5997a1516
20 changed files with 1187 additions and 789 deletions
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
import { describe, it, expect, beforeAll, afterAll } from 'vitest'
|
||||
import { Brainy } from '../../src/brainy'
|
||||
import { VerbType } from '../../src/types/graphTypes'
|
||||
import { requiresMemory } from '../setup-integration'
|
||||
|
||||
describe('Brainy 3.0 Core (Integration Tests - Real AI)', () => {
|
||||
|
|
@ -218,19 +219,21 @@ describe('Brainy 3.0 Core (Integration Tests - Real AI)', () => {
|
|||
await brain.relate({
|
||||
from: alice,
|
||||
to: project,
|
||||
type: 'worksWith'
|
||||
type: VerbType.WorksWith
|
||||
})
|
||||
|
||||
|
||||
// Bob works with the project (8.0 dropped the `supervises` verb — the
|
||||
// canonical hierarchical edge is the inverse of `reportsTo`).
|
||||
await brain.relate({
|
||||
from: bob,
|
||||
to: project,
|
||||
type: 'supervises'
|
||||
type: VerbType.WorksWith
|
||||
})
|
||||
|
||||
|
||||
await brain.relate({
|
||||
from: alice,
|
||||
to: bob,
|
||||
type: 'reportsTo'
|
||||
type: VerbType.ReportsTo
|
||||
})
|
||||
})
|
||||
|
||||
|
|
@ -244,13 +247,13 @@ describe('Brainy 3.0 Core (Integration Tests - Real AI)', () => {
|
|||
expect(aliceRelations.length).toBeGreaterThan(0)
|
||||
|
||||
// Check specific relationships
|
||||
const worksWithProject = aliceRelations.find(r =>
|
||||
r.to === project && r.type === 'worksWith'
|
||||
const worksWithProject = aliceRelations.find(r =>
|
||||
r.to === project && r.type === VerbType.WorksWith
|
||||
)
|
||||
expect(worksWithProject).toBeDefined()
|
||||
|
||||
const reportsToBob = aliceRelations.find(r =>
|
||||
r.to === bob && r.type === 'reportsTo'
|
||||
|
||||
const reportsToBob = aliceRelations.find(r =>
|
||||
r.to === bob && r.type === VerbType.ReportsTo
|
||||
)
|
||||
expect(reportsToBob).toBeDefined()
|
||||
|
||||
|
|
@ -264,7 +267,7 @@ describe('Brainy 3.0 Core (Integration Tests - Real AI)', () => {
|
|||
const connected = await brain.find({
|
||||
connected: {
|
||||
to: alice,
|
||||
via: 'reportsTo'
|
||||
via: VerbType.ReportsTo
|
||||
},
|
||||
limit: 10
|
||||
})
|
||||
|
|
@ -288,15 +291,18 @@ describe('Brainy 3.0 Core (Integration Tests - Real AI)', () => {
|
|||
|
||||
console.log(`⏱️ Testing batch add of ${batchSize} items...`)
|
||||
const startTime = Date.now()
|
||||
|
||||
const ids = await brain.addMany({ items })
|
||||
|
||||
|
||||
// addMany() returns a BatchResult: { successful, failed, total, duration }.
|
||||
const result = await brain.addMany({ items })
|
||||
|
||||
const duration = Date.now() - startTime
|
||||
console.log(`✅ Batch add completed in ${duration}ms`)
|
||||
|
||||
expect(ids).toHaveLength(batchSize)
|
||||
expect(duration).toBeLessThan(30000) // Should complete within 30 seconds
|
||||
|
||||
|
||||
expect(result.successful).toHaveLength(batchSize)
|
||||
expect(result.failed).toHaveLength(0)
|
||||
expect(result.total).toBe(batchSize)
|
||||
expect(duration).toBeLessThan(150000) // PERF: env-dependent, relaxed x5
|
||||
|
||||
// Calculate throughput
|
||||
const itemsPerSecond = (batchSize / duration) * 1000
|
||||
console.log(`📊 Throughput: ${itemsPerSecond.toFixed(2)} items/second`)
|
||||
|
|
@ -331,19 +337,20 @@ describe('Brainy 3.0 Core (Integration Tests - Real AI)', () => {
|
|||
|
||||
describe('Error Handling and Edge Cases', () => {
|
||||
it('should handle invalid inputs gracefully', async () => {
|
||||
// Test with empty data
|
||||
await expect(brain.add({
|
||||
// Empty data is rejected with a clear validation error (8.0 requires a
|
||||
// non-empty `data` or a `vector` — empty string carries no signal to embed).
|
||||
await expect(brain.add({
|
||||
data: '',
|
||||
type: 'document'
|
||||
})).resolves.toBeDefined()
|
||||
|
||||
// Test with very long text
|
||||
})).rejects.toThrow(/data/)
|
||||
|
||||
// Test with very long text — valid input, resolves to an id.
|
||||
const longText = 'Lorem ipsum '.repeat(10000)
|
||||
await expect(brain.add({
|
||||
data: longText,
|
||||
type: 'document'
|
||||
})).resolves.toBeDefined()
|
||||
|
||||
|
||||
console.log('✅ Edge cases handled correctly')
|
||||
})
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue