import type { PipelineEngineName } from "./engine.js"; import type { ConformanceReport } from "./types.js"; /** Deterministic runner the TEST injects — NOT a real engine. */ export type EngineRunner = (projectRoot: string) => Promise; /** * Asserts that two or more pipeline engines produce equivalent .bober/ artifacts * for a given fixture spec, ignoring volatile fields (timestamps, durations, runIds). * * DESIGN: No real engines run internally. The caller provides `runnerFor` which * returns a deterministic EngineRunner per engine name. Each runner writes fixed * .bober/ artifacts to a fresh projectRoot supplied by projectRootFactory(). * The harness reads back, normalizes, and deep-compares. */ export declare class EngineConformanceHarness { /** * Run each engine's runner against a fresh projectRoot, read back artifacts, * normalize (strip volatile fields), and deep-compare across engine pairs. * * @param fixtureSpecId The spec ID to pass to runners (informational). * @param engines Names of engines to compare (at least two for a diff). * @param projectRootFactory Returns a FRESH temporary root per engine. * @param runnerFor Returns the deterministic EngineRunner for each engine. * @returns ConformanceReport with equivalent:true if all artifacts match. */ assertEquivalent(fixtureSpecId: string, engines: PipelineEngineName[], projectRootFactory: () => Promise, runnerFor: (engine: PipelineEngineName) => EngineRunner): Promise; } //# sourceMappingURL=conformance.d.ts.map