import { expect, it, vi } from "vitest"; import { validateChatCatalogConsistency } from "./chat-catalog-consistency.js"; import { chatCatalogCases } from "./chat-catalog-registry.js"; import { chatCatalogScenarios } from "./chat-catalog-inventory.js"; import { validChatCatalogHumanCounts, chatCatalogHumanHistoryMatches } from "./chat-catalog-contract.js"; it("loads all 242 actual lazy declarations through the admission loaders without executing fixtures", async () => { expect(chatCatalogCases).toHaveLength(242); expect([...chatCatalogCases.map(row => row.scenarioId), "tasks.create-backlog", "tasks.delegate-announcement"].sort()) .toEqual(chatCatalogScenarios.map(row => row.id).sort()); expect(await validateChatCatalogConsistency()).toEqual({ descriptorCount: 242, fixtureCallbacksInvoked: 0 }); }); it("rejects actual declaration drift before any fixture callback executes", async () => { const descriptor = chatCatalogCases.find(row => row.scenarioId === "agents.hire-denied")!; const callback = vi.fn(() => { throw new Error("Fixture must not execute during preflight"); }); const runtime = { ...descriptor, setup: callback, observe: callback, grade: callback, verifyResult: callback }; const importer = async () => ({ [descriptor.exportName]: [runtime] }); await expect(validateChatCatalogConsistency([descriptor], importer)).resolves.toMatchObject({ descriptorCount: 1 }); await expect(validateChatCatalogConsistency([{ ...descriptor, sourceFiles: [...descriptor.sourceFiles, "unreviewed.ts"] }], importer)).rejects.toThrow("Runtime descriptor drift"); await expect(validateChatCatalogConsistency([{ ...descriptor, expectedRunCount: descriptor.expectedRunCount + 1 }], importer)).rejects.toThrow("Runtime descriptor drift"); expect(callback).not.toHaveBeenCalled(); }); it("preserves the effective one-human limit when optional declaration defaults are used", () => { const choice = chatCatalogCases.find(row => row.scenarioId === "execution-environments.choose-capable-target")!; const explicit = { ...choice, expectedHumanMessageCount: 1 }; const effective = (row: typeof choice) => row.expectedHumanMessageCount ?? 1; expect(effective(choice)).toBe(1); expect(effective(explicit)).toBe(1); expect(validChatCatalogHumanCounts(choice)).toBe(true); expect(validChatCatalogHumanCounts(explicit)).toBe(true); expect(validChatCatalogHumanCounts({ ...choice, expectedHumanMessageCount: 0 })).toBe(false); const history = { human: [{ id: "canonical", body: "Original query" }], runIds: [], boundary: { humanCommentIds: [], runIds: [] }, renderedQuery: "Original query" }; for (const implementation of [choice, explicit]) { expect(chatCatalogHumanHistoryMatches({ ...history, implementation })).toBe(true); expect(chatCatalogHumanHistoryMatches({ ...history, implementation, human: [] })).toBe(false); expect(chatCatalogHumanHistoryMatches({ ...history, implementation, human: [...history.human, { id: "extra", body: "Hidden nudge" }] })).toBe(false); } });