import { type GateRegistryModule } from "./gate-report-registry.js";
import { type TemplateEnforcementReader } from "./gate-report-templates.js";
import { type RequiredContextsReader } from "./gate-report-ruleset.js";
import { type SkipJobTokensReader } from "./gate-report-skip-jobs.js";
import { type GateReport } from "./gate-report-types.js";
/** Options for one report. */
export interface GateReportOptions {
    /** Project root to report on. */
    readonly projectRoot: string;
    /** Suppress the network call and report Tier 2 as `unknown`. */
    readonly offline?: boolean;
    /** Injectable Tier 2 reader, so tests never shell out. */
    readonly readRequiredContexts?: RequiredContextsReader;
    /** Injectable `skip_jobs` reader, for the same reason. */
    readonly readSkipJobTokens?: SkipJobTokensReader;
    /** Injectable Tier 1 ruleset-template reader, for the same reason. */
    readonly readTemplateContexts?: TemplateEnforcementReader;
    /** Injectable home directory, so agent-hook discovery is testable. */
    readonly homedir?: () => string;
}
/**
 * Every moment the report has a column for.
 *
 * There is no fixed set. `MOMENTS` is five, and three families take an
 * `:<environment>` suffix, so a project with staging and production has more
 * deploy columns than one with production alone. The axis is therefore the
 * fixed moments plus whatever family moments this project actually declares —
 * and never a bare `deploy`, which is not a moment Lisa knows.
 * @param registry - The shipped registry
 * @param gates - The gates block
 * @returns The axis, fixed moments first, then declared family moments sorted
 */
export declare function momentAxis(registry: GateRegistryModule, gates: Record<string, unknown>): string[];
/**
 * Build the gate report for one project.
 * @param options - Report inputs
 * @returns The report
 */
export declare function buildGateReport(options: GateReportOptions): Promise<GateReport>;
//# sourceMappingURL=gate-report.d.ts.map