import type { CapabilityProfile } from "../../core/src/sdk/capability.js";
import { type RenderedMatrixPlan, type RenderedRuleId } from "../../ui-detectors/src/rendered/index.js";
import { type GeometryRuleId } from "../../ui-detectors/src/geometry/index.js";
import { type LayoutRuleId } from "../../ui-detectors/src/layout/index.js";
import { type InteractionRuleId } from "../../ui-detectors/src/interaction/index.js";
import { type ConsistencyRuleId } from "../../ui-detectors/src/consistency/index.js";
import { type MeasuredLayoutRuleId } from "../../ui-detectors/src/measured-layout/index.js";
import { type RelationsRuleId } from "../../ui-detectors/src/relations/index.js";
import { type SweepsRuleId } from "../../ui-detectors/src/sweeps/index.js";
import { type A11yRuleId } from "../../ui-detectors/src/a11y/index.js";
import { type AssetsRuleId } from "../../ui-detectors/src/assets/index.js";
import type { SweepsMatrixPlan } from "../../ui-detectors/src/sweeps/matrix.js";
import type { CaptureOptions } from "../../playwright/src/cell-runner.js";
import type { Finding } from "../../schema/src/records/finding.js";
import type { KernelStores } from "../../core/src/classify/classifier.js";
import { type CorpusScore } from "./harness.js";
export type RunCorpusUiFixtureInput = {
    publicDir: string;
    plan: RenderedMatrixPlan;
    ruleIds: RenderedRuleId[];
    seed: string;
    runId: string;
    clockStart: string;
    timeouts?: {
        navigateMs: number;
        settleMs: number;
    };
    capture?: CaptureOptions;
    capabilities?: CapabilityProfile;
};
export type CorpusMatrixSelector = {
    matrix: "rendered";
    ruleIds: RenderedRuleId[];
} | {
    matrix: "geometry";
    ruleIds: GeometryRuleId[];
} | {
    matrix: "layout";
    ruleIds: LayoutRuleId[];
} | {
    matrix: "interaction";
    ruleIds: InteractionRuleId[];
} | {
    matrix: "consistency";
    ruleIds: ConsistencyRuleId[];
} | {
    matrix: "measured-layout";
    ruleIds: MeasuredLayoutRuleId[];
} | {
    matrix: "relations";
    ruleIds: RelationsRuleId[];
} | {
    matrix: "sweeps";
    ruleIds: SweepsRuleId[];
} | {
    matrix: "a11y";
    ruleIds: A11yRuleId[];
} | {
    matrix: "assets";
    ruleIds: AssetsRuleId[];
};
export type CorpusMatrixName = CorpusMatrixSelector["matrix"];
export type RunCorpusMatrixFixtureInput = CorpusMatrixSelector & {
    publicDir: string;
    plan: SweepsMatrixPlan;
    seed: string;
    runId: string;
    clockStart: string;
    timeouts?: {
        navigateMs: number;
        settleMs: number;
    };
    capture?: CaptureOptions;
    capabilities?: CapabilityProfile;
};
/**
 * Executes rendered UI detectors against a corpus fixture's static pages via
 * the real `runRenderedMatrix` product pipeline (the same pipeline
 * `packages/ui-detectors/test/rendered.test.ts` exercises), rather than the
 * CLI subprocess used by `runCorpusFixture`. UI scopes are not yet wired into
 * `verify --scope=ui` (M1 preview), so this is the only path that can prove
 * real rendered-detector positives/negatives end to end today.
 */
export declare function runCorpusUiFixture(input: RunCorpusUiFixtureInput): Promise<Finding[]>;
/**
 * Runs any UI detector family against a corpus fixture's static pages through
 * that family's real product matrix runner, so a fixture can prove positives
 * and negatives for every registered detector class rather than only the
 * rendered and geometry families.
 */
export declare function runCorpusMatrixFixture(input: RunCorpusMatrixFixtureInput, stores: KernelStores): Promise<Finding[]>;
/**
 * Runs the same fixture input twice against one shared static server so a
 * determinism comparison exercises only the detection pipeline. Each
 * `runCorpusUiFixture` call binds a fresh ephemeral port; comparing findings
 * across two separately started servers would fail on the server's own
 * per-run port rather than on detector output, since several rendered
 * detectors (e.g. UI-011's console-error locator) legitimately record the
 * page's live navigated URL as evidence.
 */
export declare function runCorpusUiFixtureTwice(input: RunCorpusUiFixtureInput): Promise<[Finding[], Finding[]]>;
export declare function scoreCorpusUiFixture(fixtureDir: string, input: RunCorpusUiFixtureInput): Promise<CorpusScore>;
//# sourceMappingURL=ui-harness.d.ts.map