/**
 * The `skip_jobs` tokens a project still forwards, and what replaces each.
 *
 * `SKIP_JOB_TOKENS` has thirty-one entries and `QUALITY_JOB_GATES` has
 * eighteen; the gap is the point. A token with no gate cannot be migrated, and
 * being wrong about which gate replaces a token does not break a build — it
 * declares the WRONG gate `off`, so a check silently stops running while the
 * configuration reads deliberate.
 * @module cli/gate-report-skip-jobs
 */
import type { GateRegistryModule } from "./gate-report-registry.js";
import type { Finding, SkipJobRow } from "./gate-report-types.js";
/** Reads the tokens a project's own `ci.yml` forwards. */
export type SkipJobTokensReader = (projectRoot: string) => Promise<readonly string[]>;
/**
 * Read the tokens from the project's own `ci.yml`.
 * @param projectRoot - Project root
 * @returns The forwarded tokens
 */
export declare const defaultSkipJobTokensReader: SkipJobTokensReader;
/**
 * Resolve every forwarded token through the shipped migration table.
 * @param options - Inputs
 * @param options.registry - The shipped registry
 * @param options.projectRoot - Project root
 * @param options.read - Injectable token reader
 * @returns The rows, or a stated reason there are none to report
 */
export declare function buildSkipJobRows(options: {
    registry: GateRegistryModule;
    projectRoot: string;
    read: SkipJobTokensReader;
}): Promise<Finding<readonly SkipJobRow[]>>;
//# sourceMappingURL=gate-report-skip-jobs.d.ts.map