Files
ruvnet__ruflo/v3/@claude-flow/cli/__tests__/issue-2805-embedding-backend-truth.test.ts
rUv 67ff9898c0 fix: resolve current runtime and verification defects for v3.32.36 (#2850)
* fix(cli): make runtime status and learning signals truthful

* fix(metaharness): accept padded scan severities

* fix(codex): make core hooks and status skill native

* fix(security): make witness verification hermetic

* fix(metrics): expose grounded learning outcomes

* fix(hooks): deduplicate project and plugin events

* fix(verification): preserve security audit payloads

* fix(runtime): stabilize dual memory skills and MCP schemas

* fix(cli): harden helper signing and reflexion health

* test(release): align helper and container invariants

* chore(release): prepare v3.32.36

* test(funnel): align gates with cold-start seed pool

* fix(ci): document MCP environment precedence
2026-07-29 15:08:51 -04:00

53 lines
2.0 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { mkdtempSync, rmSync } from 'node:fs';
import { join } from 'node:path';
import { tmpdir } from 'node:os';
vi.mock('../src/memory/memory-initializer.js', () => ({
generateEmbedding: vi.fn(async (text: string) => ({
embedding: Array.from({ length: 8 }, (_, i) => Math.sin(text.length + i)),
dimensions: 8,
model: 'hash-fallback',
backend: 'mock',
})),
searchEntries: vi.fn(async () => ({ results: [] })),
}));
const { embeddingsTools } = await import('../src/mcp-tools/embeddings-tools.js');
const init = embeddingsTools.find(tool => tool.name === 'embeddings_init')!;
const status = embeddingsTools.find(tool => tool.name === 'embeddings_status')!;
const compare = embeddingsTools.find(tool => tool.name === 'embeddings_compare')!;
let originalCwd: string;
let workdir: string;
beforeEach(async () => {
originalCwd = process.cwd();
workdir = mkdtempSync(join(tmpdir(), 'ruflo-2805-'));
process.chdir(workdir);
await init.handler({ force: true });
});
afterEach(() => {
process.chdir(originalCwd);
rmSync(workdir, { recursive: true, force: true });
});
describe('#2805 embedding backend truthfulness', () => {
it('removes semantic-search claims while the hash fallback is active', async () => {
const result = await status.handler({}) as any;
expect(result.embeddingBackend).toBe('mock');
expect(result.semanticGrounded).toBe(false);
expect(result.capabilities.features).not.toContain('semantic search');
expect(result.warning).toMatch(/not semantically meaningful/i);
});
it('does not interpret hash similarity as semantic similarity', async () => {
const result = await compare.handler({ text1: 'a cat', text2: 'banking regulation' }) as any;
expect(result.embeddingBackend).toBe('mock');
expect(result.semanticGrounded).toBe(false);
expect(result.interpretation).toBeNull();
expect(result.warning).toMatch(/not semantically meaningful/i);
});
});