Merge Memory V2 runtime facade
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
import { evaluateMemoryV2Health } from './memory-v2-health.mjs';
|
||||
|
||||
function healthyStatus(overrides = {}) {
|
||||
return {
|
||||
enabled: true,
|
||||
backend: 'legacy',
|
||||
selectedBackend: 'legacy-conversation-memory',
|
||||
profileEnabled: true,
|
||||
eventLogEnabled: true,
|
||||
vectorEnabled: false,
|
||||
failOpen: true,
|
||||
backends: [
|
||||
{
|
||||
name: 'legacy-conversation-memory',
|
||||
available: true,
|
||||
supports: {
|
||||
resolve: true,
|
||||
write: true,
|
||||
compact: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'pgvector',
|
||||
available: false,
|
||||
supports: {
|
||||
resolve: true,
|
||||
write: false,
|
||||
compact: false,
|
||||
},
|
||||
reason: 'not_configured',
|
||||
},
|
||||
],
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
test('evaluateMemoryV2Health passes for legacy-safe status', () => {
|
||||
const report = evaluateMemoryV2Health({
|
||||
status: healthyStatus(),
|
||||
writeResult: { source: 'legacy-conversation-memory' },
|
||||
compactResult: { source: 'legacy-conversation-memory' },
|
||||
requireEnabled: true,
|
||||
expectedBackend: 'legacy',
|
||||
});
|
||||
|
||||
assert.equal(report.ok, true);
|
||||
assert.equal(report.summary.selectedBackend, 'legacy-conversation-memory');
|
||||
assert.equal(report.checks.every((check) => check.ok), true);
|
||||
});
|
||||
|
||||
test('evaluateMemoryV2Health fails when status contract and fail-open are broken', () => {
|
||||
const report = evaluateMemoryV2Health({
|
||||
status: {
|
||||
enabled: true,
|
||||
backend: 'legacy',
|
||||
selectedBackend: null,
|
||||
failOpen: false,
|
||||
backends: [],
|
||||
},
|
||||
requireEnabled: true,
|
||||
});
|
||||
|
||||
assert.equal(report.ok, false);
|
||||
assert.equal(report.checks.find((check) => check.name === 'status_contract').ok, false);
|
||||
assert.equal(report.checks.find((check) => check.name === 'fail_open').ok, false);
|
||||
assert.equal(report.checks.find((check) => check.name === 'legacy_available').ok, false);
|
||||
});
|
||||
|
||||
test('evaluateMemoryV2Health allows pgvector resolve canary while requiring legacy write and compact', () => {
|
||||
const report = evaluateMemoryV2Health({
|
||||
status: healthyStatus({
|
||||
backend: 'pgvector',
|
||||
selectedBackend: 'pgvector',
|
||||
vectorEnabled: true,
|
||||
backends: [
|
||||
healthyStatus().backends[0],
|
||||
{
|
||||
name: 'pgvector',
|
||||
available: true,
|
||||
supports: {
|
||||
resolve: true,
|
||||
write: false,
|
||||
compact: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
writeResult: { source: 'legacy-conversation-memory' },
|
||||
compactResult: { source: 'legacy-conversation-memory' },
|
||||
expectedBackend: 'pgvector',
|
||||
});
|
||||
|
||||
assert.equal(report.ok, true);
|
||||
assert.equal(report.checks.find((check) => check.name === 'pgvector_canary_available').ok, true);
|
||||
});
|
||||
|
||||
test('evaluateMemoryV2Health fails when semantic canary captures writes', () => {
|
||||
const report = evaluateMemoryV2Health({
|
||||
status: healthyStatus({
|
||||
backend: 'pgvector',
|
||||
selectedBackend: 'pgvector',
|
||||
vectorEnabled: true,
|
||||
}),
|
||||
writeResult: { source: 'pgvector' },
|
||||
compactResult: { source: 'legacy-conversation-memory' },
|
||||
});
|
||||
|
||||
assert.equal(report.ok, false);
|
||||
assert.equal(report.checks.find((check) => check.name === 'write_uses_legacy').ok, false);
|
||||
});
|
||||
Reference in New Issue
Block a user