/* Unit tests for discovery covering kernel/discovery; loadKernelAppConfig. It also guards the documented public contract and regression-sensitive edge cases. Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only. Fixtures stay inline and minimal so each case states its own setup. RFC-1311: Compass header sweep — declares the discovery suite's contract for test-file scaffold coverage. */ // @ai-invariant fixtures must not couple to kernel internals beyond the public surface under test import { test, expect, describe } from "vitest"; import { mkdtemp, rm, writeFile } from "node:fs/promises"; import { join } from "node:path"; import { tmpdir } from "node:os"; import * as mod from "../discovery.ts"; import type { DiscoveredSiteWorkspace } from "@warpgogol/werkstatt-shared/kernel"; describe("kernel/discovery", () => { test("module loads successfully", () => { expect(mod).toBeDefined(); }); test("exports discoverSiteWorkspaces", () => { expect(typeof mod.discoverSiteWorkspaces).toBe("function"); }); test("exports findWorkspaceRoot", () => { expect(typeof mod.findWorkspaceRoot).toBe("function"); }); }); describe("loadKernelAppConfig", () => { test("wraps unresolvable config imports with site name and config path", async () => { const root = await mkdtemp(join(tmpdir(), "kernel-discovery-")); try { const configPath = join(root, "kernel.config.ts"); await writeFile( configPath, 'import "nonexistent-pkg-unresolvable";\nexport default { moduleLoaders: {} };\n', ); const site: DiscoveredSiteWorkspace = { name: "broken-site", directory: root, toolsDirectory: root, configPath, }; await expect(mod.loadKernelAppConfig(site)).rejects.toThrow( /Failed to load kernel config.*broken-site.*nonexistent-pkg-unresolvable/s, ); } finally { await rm(root, { recursive: true, force: true }); } }); });