/**
 * Pipeline step: Fetch documentation from Sanity CMS.
 *
 * Uses ctx.docFetcher (the DocFetcher port) for all fetching. The adapter
 * handles GROQ queries, perspective diffing, document overlays, and URL
 * fetching. This step orchestrates the call and writes metadata files.
 *
 * When a source-level perspective is active and release impact data is
 * available, this step computes which tasks are affected by the release
 * and stores a `releaseAutoScope` entry in PipelineState. Downstream
 * steps (GenerateConfigsStep, RunEvalStep) use this to narrow scope.
 */
import { type AppContext, type LiteracyTaskDefinition, type PerspectiveExpansion, type PipelineState, type PipelineStep, type ReleaseAutoScope, type ReleaseImpact, type StepResult, type ValidationIssue } from "../../_vendor/ailf-core/index.d.ts";
export declare class FetchDocsStep implements PipelineStep {
    readonly name = "fetch-docs";
    check(): ValidationIssue[];
    execute(ctx: AppContext, state: PipelineState): Promise<StepResult>;
    cacheInputs(ctx: AppContext): string[];
    cacheContext(ctx: AppContext): string[];
}
/**
 * Compute which tasks are affected by a content release.
 *
 * Builds a reverse mapping (slug → task IDs) from all tasks' canonical
 * doc refs — including slugs that task-level `PerspectiveDocRef`s expanded
 * to during fetch (`perspectiveExpansion`) — then intersects with the
 * release impact's added/modified slugs.
 * It reads only `releaseImpact.added`/`modified` (the canonical-scoped diff),
 * so `releaseImpact.uncovered` — release edits outside the evaluated set — by
 * construction never changes which tasks are scoped; those docs are surfaced
 * for visibility, not evaluated.
 *
 * Returns null if auto-scoping should not apply (e.g., all tasks affected).
 *
 * Exported for unit testing.
 */
export declare function computeAutoScope(tasks: LiteracyTaskDefinition[], releaseImpact: ReleaseImpact, perspective: string, perspectiveExpansion?: PerspectiveExpansion): ReleaseAutoScope | null;
