/**
 * Contract runner — executes the conformance cases shipped with
 * `@skill-map/spec` against an installed binary and emits a pass/fail result
 * per case.
 *
 * Implements the six assertion types from `spec/schemas/conformance-case.schema.json`.
 * Provisions a clean tmp scope per case, optionally pre-populated with the
 * referenced fixture corpus.
 *
 * Step 0b scope: single-case dispatch. Suite-level runner + reporter land
 * alongside Step 2 extensions.
 */
type IAssertionResult = {
    ok: true;
    type: string;
} | {
    ok: false;
    type: string;
    reason: string;
};
interface IRunCaseResult {
    caseId: string;
    passed: boolean;
    exitCode: number;
    stdout: string;
    stderr: string;
    assertions: IAssertionResult[];
}
interface IRunCaseOptions {
    /** Absolute path to the binary wrapper (e.g. `bin/sm.js`). */
    binary: string;
    /** Absolute path to the `@skill-map/spec` root. */
    specRoot: string;
    /** Absolute path to the case JSON under `<conformance-root>/cases/`. */
    casePath: string;
    /**
     * Absolute path to the `<conformance-root>/fixtures/` directory backing
     * this case (or the parent conformance suite).
     *
     * Phase 5 / A.13 introduced per-Provider conformance directories that
     * live outside the spec tree (Claude-specific cases moved to
     * `src/extensions/providers/claude/conformance/`). Cases reference
     * fixtures by directory name; the runner resolves them under
     * `fixturesRoot` so the spec-agnostic kernel-empty-boot case and the
     * Claude `basic-scan` / `rename-high` / `orphan-detection` cases can
     * coexist without colliding fixture namespaces. Defaults to
     * `<specRoot>/conformance/fixtures` for the legacy spec layout.
     */
    fixturesRoot?: string;
    /** Extra env vars passed to the child. */
    env?: NodeJS.ProcessEnv;
}
type IAssertion = {
    type: 'exit-code';
    value: number;
} | {
    type: 'json-path';
    path: string;
    equals?: unknown;
    greaterThan?: number;
    lessThan?: number;
    matches?: string;
} | {
    type: 'file-exists';
    path: string;
} | {
    type: 'file-contains-verbatim';
    path: string;
    fixture: string;
} | {
    type: 'file-matches-schema';
    path: string;
    schema: string;
} | {
    type: 'stderr-matches';
    pattern: string;
};
declare function runConformanceCase(options: IRunCaseOptions): IRunCaseResult;
/** Verifies the spec root looks sane (contains `index.json`). */
declare function assertSpecRoot(specRoot: string): void;

export { type IAssertion, type IAssertionResult, type IRunCaseOptions, type IRunCaseResult, assertSpecRoot, runConformanceCase };
