import type { ExecutorEvidence } from "./gate-report-types.js";
/** One project hook file, read and classified. */
export interface HookFile {
    /** Project-relative path, e.g. `.husky/pre-push`. */
    readonly file: string;
    /** Its contents, with comment lines blanked. */
    readonly body: string;
    /** The moments this hook fires at, sorted. */
    readonly moments: readonly string[];
    /** Moments it hands to the gate runner, sorted. Empty when it runs none. */
    readonly gateRunnerMoments: readonly string[];
    /** Gates it carries a `lisa_gate_covers`-guarded built-in step for. */
    readonly builtinGates: readonly string[];
}
/** Everything the project's hooks were found to do. */
export interface HookEvidence {
    /** Hook files, sorted by name, so the report is stable across machines. */
    readonly files: readonly HookFile[];
}
/** Inputs for one (gate, moment) executor lookup. */
export interface ExecutorQuery {
    /** The moment being reported. */
    readonly moment: string;
    /** The gate being reported. */
    readonly gateId: string;
    /** The task this gate resolves to, or null. */
    readonly task: string | null;
    /** Whether the settings file puts this pair into service. */
    readonly declared: boolean;
}
/**
 * Classify one hook file.
 * @param file - Project-relative path
 * @param raw - Raw file contents
 * @returns The classified hook
 */
export declare function classifyHook(file: string, raw: string): HookFile;
/**
 * Read and classify every hook in `.husky`.
 * @param projectRoot - Project root
 * @returns Hook evidence, empty when the directory is absent
 */
export declare function collectHookEvidence(projectRoot: string): Promise<HookEvidence>;
/**
 * Whether a hook body invokes one task literally, outside the gate runner.
 *
 * Bounded on both sides on purpose. `test:cov` must not match `test:cov:unit`:
 * they are different scripts, and reporting the wrong one as proof would
 * manufacture exactly the green this report exists to withhold.
 * @param body - Comment-stripped hook body
 * @param task - The task to look for
 * @returns True when the hook runs that exact task
 */
export declare function hookInvokesTask(body: string, task: string): boolean;
/**
 * Every executor proved for one gate at one moment.
 * @param evidence - Hook evidence for the project
 * @param query - The pair being reported
 * @returns Executors, sorted by file then kind
 */
export declare function executorsFor(evidence: HookEvidence, query: ExecutorQuery): ExecutorEvidence[];
//# sourceMappingURL=gate-report-executors.d.ts.map