/** One gate as the shipped registry defines it. */
export interface RegistryGate {
    readonly label: string;
    readonly summary: string;
    readonly task?: string;
    readonly taskAt?: Readonly<Record<string, string>>;
    /** Why `task` does not resolve on every npm stack; absent when it does. */
    readonly declareOnly?: string;
    /** The script a template already ships for this concern, where one exists. */
    readonly shippedAs?: string;
    readonly moments: readonly string[];
    readonly work?: string;
    readonly costly?: boolean;
    readonly mayRewrite?: boolean;
}
/** One gate as `resolveMoment` returns it. */
export interface ResolvedGate {
    readonly id: string;
    readonly level: string;
    readonly mode: string;
    readonly awaits: string | null;
    readonly task: string | null;
    readonly command: string | null;
    readonly label: string;
    /**
     * The `shippedAs` substitution that produced `task`, or null.
     *
     * Non-null only when the concern-named default resolves to no script in this
     * project and the template's own prover does. Two scripts can back one gate,
     * so a caller reporting what ran has to be able to name both.
     */
    readonly alias?: {
        readonly from: string;
        readonly to: string;
    } | null;
}
/** One `skip_jobs` token's migration. */
export interface SkipJobResolution {
    readonly token: string;
    readonly status: string;
    readonly gate: string | null;
    readonly declaration: string | null;
}
/** The config `readGates` parses out of `.lisa.config.json`. */
export interface ParsedGateConfig {
    readonly runner: string;
    readonly gates: Record<string, unknown>;
}
/** The slice of the shipped registry this report calls. */
export interface GateRegistryModule {
    readonly REGISTRY: Readonly<Record<string, RegistryGate>>;
    readonly MOMENTS: readonly string[];
    readonly MOMENT_FAMILIES: readonly string[];
    readonly INTERCEPTORS: Readonly<Record<string, string>>;
    readonly QUALITY_JOB_GATES: Readonly<Record<string, string>>;
    /**
     * Jobs that prove a gate another job carries the label for.
     *
     * Optional because a consumer may hold an older copy of the shipped registry
     * that predates it. Absent reads as "no secondary provers", which is what
     * every registry before this one meant.
     */
    readonly SECONDARY_PROVER_JOBS?: readonly string[];
    readonly DEFAULT_RUNNER: string;
    readonly readGates: (cwd: string) => ParsedGateConfig;
    readonly validateGates: (gates: Record<string, unknown>) => string[];
    readonly resolveMoment: (options: {
        gates: Record<string, unknown>;
        moment: string;
        runner?: string;
        includeOff?: boolean;
        /**
         * The project's `package.json` scripts. Omitted or `null` means UNKNOWN,
         * and an unknown manifest resolves exactly as it did before `shippedAs`
         * was consulted — silence must not change an answer.
         */
        scripts?: Readonly<Record<string, string>> | null;
    }) => ResolvedGate[];
    readonly contextsFor: (gates: Record<string, unknown>, options?: {
        moment?: string;
        workflowName?: string;
    }) => string[];
    readonly isMoment: (moment: string) => boolean;
    readonly momentFamily: (moment: string) => string;
    readonly skipJobMigration: (token: string, moment: string) => SkipJobResolution;
}
/**
 * Locate the shipped registry inside the running Lisa package.
 * @returns Absolute path, or null when it cannot be found
 */
export declare function resolveGateRegistryPath(): string | null;
/**
 * Locate the running Lisa package's root.
 *
 * Derived from the registry's own location rather than walked a second time.
 * Two walks would be two answers to "where is Lisa", and the one that went
 * stale would be the one nobody measured.
 * @returns Absolute package root, or null when the registry cannot be found
 */
export declare function resolveLisaPackageRoot(): string | null;
/**
 * Import the shipped registry.
 * @returns The registry module, or null when it is not installed
 */
export declare function loadGateRegistry(): Promise<GateRegistryModule | null>;
//# sourceMappingURL=gate-report-registry.d.ts.map