import type { FacadeSource, Finding } from "./gate-report-types.js";
/** Everything the local workflows say about façade wiring. */
export interface FacadeFacts {
    /** Whether `quality.yml` itself was found and parsed. */
    readonly qualityYmlPresent: boolean;
    /** Workflow files parsed, project-relative and sorted. */
    readonly files: readonly string[];
    /** Job id -> the gate its façade resolves. */
    readonly gatesByJob: ReadonlyMap<string, string>;
    /** Every job id declared across the parsed workflows. */
    readonly jobs: ReadonlySet<string>;
    /**
     * Every status context the project's OWN workflows could post.
     *
     * Both the bare job name and the `workflow / job` form, because GitHub
     * spells a context differently depending on how the job was reached and a
     * report that matched only one form would attribute a project's own job to a
     * third party.
     */
    readonly projectContexts: ReadonlySet<string>;
    /** Every job, with the shell it runs and the contexts it could post. */
    readonly jobSites: readonly JobSite[];
}
/** One CI job, as the merge-verdict join reads it. */
export interface JobSite {
    /** The job's id. */
    readonly id: string;
    /** The job's `name:`, which is what a ruleset matches by string. */
    readonly name: string;
    /** The contexts it could post, in both spellings GitHub uses. */
    readonly contexts: readonly string[];
    /** Every `run:` block in the job, concatenated. */
    readonly shell: string;
}
/** The refusal a project with no copy of the workflow gets. */
export declare const TIER_THREE_UNKNOWABLE: Finding<never>;
/**
 * Read what the project's own workflows say about façade wiring.
 * @param projectRoot - Project root
 * @returns The facts, empty when the project holds no workflows
 */
export declare function readFacadeFacts(projectRoot: string): Promise<FacadeFacts>;
/**
 * How the report names the workflows it read.
 * @param facts - The parsed workflow facts
 * @returns The source block
 */
export declare function facadeSourceOf(facts: FacadeFacts): FacadeSource;
/**
 * Whether the CI job for one gate reads the declaration.
 *
 * Three answers, and the third is not a fourth state smuggled in: a job the
 * workflow does not declare at all is a different fact from a job that runs a
 * hardcoded command, and calling the first one `false` would report a gate as
 * unwired on the strength of never having found it.
 * @param facts - The parsed workflow facts
 * @param gateId - The gate being reported
 * @param qualityJob - The CI job the static table pairs with it
 * @returns Whether that job's façade resolves this gate
 */
export declare function facadeFinding(facts: FacadeFacts, gateId: string, qualityJob: string | null): Finding<boolean>;
//# sourceMappingURL=gate-report-facade.d.ts.map