/**
 * ConcurrencyLimiter — bounded-concurrency scheduler for the fact-loader
 * adapters (D0091).
 *
 * The GCS reader fans a `Promise.all` over every artifact entry in a run and,
 * during a backfill, over hundreds of runs. Without a bound that would open
 * hundreds of concurrent GCS downloads and saturate the client connection pool
 * and GCS's per-prefix read quota. This limiter bounds in-flight work to `limit`
 * steady-state (transiently `limit + 1` in the microtask window between a task
 * releasing its slot and a woken waiter re-incrementing — a soft cap, matching
 * the writer's limiter); excess tasks queue FIFO and each completion wakes
 * exactly one waiter.
 *
 * It is the same shape as the private limiter in `GcsArtifactWriter`
 * (`artifact-capture/gcs-artifact-writer.ts`), lifted to a named module so the
 * reader can share the pattern without duplicating an anonymous class.
 *
 * @see docs/decisions/D0091-bigquery-analytics-fact-loader.md
 */
export declare class ConcurrencyLimiter {
    private inflight;
    private readonly waiters;
    private readonly limit;
    constructor(limit: number);
    /** Run `task` once a slot is free; releases the slot (and wakes one waiter) when it settles. */
    run<T>(task: () => Promise<T>): Promise<T>;
}
