diff --git a/gitnexus/src/core/group/extractors/manifest-extractor.ts b/gitnexus/src/core/group/extractors/manifest-extractor.ts index fd80287ee..e2414b73c 100644 --- a/gitnexus/src/core/group/extractors/manifest-extractor.ts +++ b/gitnexus/src/core/group/extractors/manifest-extractor.ts @@ -280,6 +280,7 @@ export class ManifestExtractor { ORDER BY f.filePath ASC LIMIT 1`, { contract: link.contract }, + ); } else if (link.type === 'custom') { // Workspace extractors produce qualified contracts like "mathlex::Expression". // Graph nodes store the unqualified symbol name ("Expression"), so strip diff --git a/gitnexus/test/global-setup.ts b/gitnexus/test/global-setup.ts new file mode 100644 index 000000000..f5760a1b1 --- /dev/null +++ b/gitnexus/test/global-setup.ts @@ -0,0 +1,54 @@ +/** + * Vitest globalSetup — runs once in the MAIN process before any forks. + * + * Creates a single shared LadybugDB with full schema so that forked test + * files only need to clear + reseed data instead of recreating the + * entire schema each time (~29 DDL queries per file eliminated). + * + * The dbPath is shared with test files via vitest's provide/inject API. + */ +import path from 'path'; +import lbug from '@ladybugdb/core'; +import type { GlobalSetupContext } from 'vitest/node'; +import { createTempDir } from './helpers/test-db.js'; +import { + NODE_SCHEMA_QUERIES, + REL_SCHEMA_QUERIES, + EMBEDDING_SCHEMA, +} from '../src/core/lbug/schema.js'; + +export default async function setup({ provide }: GlobalSetupContext) { + const tmpHandle = await createTempDir('gitnexus-shared-'); + const dbPath = path.join(tmpHandle.dbPath, 'lbug'); + + // Create DB with full schema + const db = new lbug.Database(dbPath); + const conn = new lbug.Connection(db); + + for (const q of NODE_SCHEMA_QUERIES) { + await conn.query(q); + } + for (const q of REL_SCHEMA_QUERIES) { + await conn.query(q); + } + await conn.query(EMBEDDING_SCHEMA); + + // Pre-install FTS extension so forks don't need to download it + try { + await conn.query('INSTALL fts'); + await conn.query('LOAD EXTENSION fts'); + } catch { + // FTS may already be installed system-wide — not fatal + } + + await conn.close(); + await db.close(); + + // Share the dbPath with all test files via inject('lbugDbPath') + provide('lbugDbPath', dbPath); + + // Teardown: remove temp directory after all tests complete + return async () => { + await tmpHandle.cleanup(); + }; +} diff --git a/gitnexus/test/vitest.d.ts b/gitnexus/test/vitest.d.ts new file mode 100644 index 000000000..63f658e6b --- /dev/null +++ b/gitnexus/test/vitest.d.ts @@ -0,0 +1,7 @@ +import 'vitest'; + +declare module 'vitest' { + export interface ProvidedContext { + lbugDbPath: string; + } +}