import { test, expect, describe, beforeEach, afterEach } from "vitest"; import { mkdtemp, rm, mkdir, writeFile, readFile } from "node:fs/promises"; import { existsSync } from "node:fs"; import { join, resolve } from "node:path"; import { tmpdir } from "node:os"; import { runKernelWire } from "../wire.ts"; import type { KernelCommandInput, KernelRuntimeContext, DiscoveredSiteWorkspace, } from "@warpgogol/werkstatt-shared/kernel"; import type { ActualState } from "@warpgogol/werkstatt-shared/kernel"; import { createDefaultIO } from "@warpgogol/werkstatt-shared/kernel"; import { createKernelLogger } from "../logger.ts"; /* RFC-1057/RFC-1147: Integration test for kernel.wire. Runs runKernelWire on a minimal fixture and verifies the generated kernel.config.ts delegates to siteModuleLoaders() — the canonical SITE_MODULE_MAP surface. Guards the uniform-surface contract: exactly one emitted file, no tools/modules or tools/runtime output. 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 wire suite's contract for test-file scaffold coverage. */ // @ai-invariant fixtures must not couple to internals beyond the public surface under test const WORKSPACE_ROOT = resolve(import.meta.dirname, "../../.."); const SYSTEM_MD = `--- app: test-app version: 1.0.0 identity: systemStar: test biome: default i18n: default: de supported: de: true title: Test App description: Test fixture for kernel.wire integration test --- # Test App Test content. `; const PACKAGE_JSON = JSON.stringify({ name: "test-app", version: "0.0.0", dependencies: { "@warpgogol/forge": "*", "@warpgogol/werkstatt-engine": "*", "@warpgogol/werkstatt-site": "*", }, }); async function makeContext(workspaceRoot: string, siteDir: string): Promise { const logger = createKernelLogger("pretty"); const { io, intents } = createDefaultIO(); const site: DiscoveredSiteWorkspace = { name: "test-app", directory: siteDir, toolsDirectory: join(siteDir, "tools"), packageName: "test-app", configPath: join(siteDir, "tools", "kernel.config.ts"), }; const actualState: ActualState = { commands: new Map(), pipelines: new Map(), components: new Map(), }; return { workspaceRoot, site, siteExplicit: true, logger, dryRun: false, outputFormat: "pretty", io, fileIntents: intents, actualState, ownershipMap: [], }; } describe("RFC-1147: kernel.wire uniform surface", () => { let tmpDir: string; let siteDir: string; beforeEach(async () => { tmpDir = await mkdtemp(join(tmpdir(), "rfc1147-wire-")); siteDir = join(tmpDir, "test-app"); await mkdir(join(siteDir, "src", "content"), { recursive: true }); await mkdir(join(siteDir, "tools"), { recursive: true }); await writeFile(join(siteDir, "src", "content", "system.md"), SYSTEM_MD); await writeFile(join(siteDir, "package.json"), PACKAGE_JSON); }); afterEach(async () => { await rm(tmpDir, { recursive: true, force: true }); }); test("generates only tools/kernel.config.ts — no tools/modules or tools/runtime", async () => { const context = await makeContext(WORKSPACE_ROOT, siteDir); const input: KernelCommandInput = { argv: [], flags: {} }; const result = await runKernelWire(input, context); expect(result.exitCode).toBe(0); expect(result.data?.status).toBe("ok"); expect(result.data?.generated).toEqual(["tools/kernel.config.ts"]); expect(existsSync(join(siteDir, "tools", "kernel.config.ts"))).toBe(true); expect(existsSync(join(siteDir, "tools", "modules"))).toBe(false); expect(existsSync(join(siteDir, "tools", "runtime"))).toBe(false); }); test("generated kernel.config.ts delegates to siteModuleLoaders()", async () => { const context = await makeContext(WORKSPACE_ROOT, siteDir); const input: KernelCommandInput = { argv: [], flags: {} }; await runKernelWire(input, context); const configPath = join(siteDir, "tools", "kernel.config.ts"); const content = await readFile(configPath, "utf-8"); expect(content).toContain('from "@warpgogol/werkstatt-engine/kernel"'); expect(content).toContain("defineKernelConfig"); expect(content).toContain("siteModuleLoaders"); expect(content).toContain("moduleLoaders: siteModuleLoaders()"); expect(content).toContain('name: "test-app"'); // No per-module loader literals — the surface is canonical in the engine. expect(content).not.toContain("./modules/"); expect(content).not.toContain("createForgeRfcModule"); }); });