import assert from "node:assert/strict"; import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs"; import { tmpdir } from "node:os"; import path from "node:path"; import { afterEach, beforeEach, describe, it, vi } from "vitest"; const markdown = vi.hoisted(() => ({ loaded: false })); vi.mock("../markdown.ts", async (importOriginal) => { markdown.loaded = true; return importOriginal(); }); const roots: string[] = []; function validSystem(): string { const root = mkdtempSync(path.join(tmpdir(), "the-system-startup-")); roots.push(root); mkdirSync(path.join(root, ".system")); for (const directory of ["specs", "phases", "plans", "issues", "research"]) mkdirSync(path.join(root, ".system", directory)); for (const name of ["SYSTEM.md", "MISSION.md", "RULES.md"]) writeFileSync(path.join(root, ".system", name), `# ${name}\n`, "utf8"); writeFileSync( path.join(root, ".system", "config.json"), '{"prefix":"PX","schemaVersion":0}\n', "utf8", ); writeFileSync( path.join(root, ".system", "board.json"), '{"schemaVersion":0,"items":{}}\n', "utf8", ); return root; } beforeEach(() => { markdown.loaded = false; vi.resetModules(); }); afterEach(() => { for (const root of roots.splice(0)) rmSync(root, { recursive: true }); }); describe("The System startup", () => { it("does not load the Markdown parser for a project without a current phase", async () => { const handlers = new Map< string, ((event: { cwd: string }) => Promise)[] >(); const { default: registerTheSystem } = await import("../index.ts"); registerTheSystem({ events: { emit() {} }, getActiveTools: () => [], on: ( event: string, handler: (event: { cwd: string }) => Promise, ) => { handlers.set(event, [...(handlers.get(event) ?? []), handler]); }, registerCommand() {}, registerTool() {}, setActiveTools() {}, } as never); const discover = handlers.get("resources_discover")?.[0]; assert.ok(discover); await discover({ cwd: validSystem() }); assert.equal(markdown.loaded, false); }); });