/**
 * 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 DocumentManifestEntry, type GeneralizedTaskDefinition, type LiteracyTaskDefinition, type PerspectiveExpansion, type PipelineState, type PipelineStep, type ReleaseAutoScope, type ReleaseImpact, type StepResult, type ValidationIssue } from "../../_vendor/ailf-core/index.d.ts";
/**
 * Whether a task should be included in the doc-fetch set.
 *
 * Literacy tasks always qualify (the fetcher decides per-task what each one
 * gets — see the comment above `literacyTasks` below). Agent-harness tasks
 * qualify only when they declare `context.docs`, so their canonical context
 * gets written to `contexts/canonical/<id>.md` for `buildSandboxConfig` to
 * materialize into the sandbox as a read-only fixture. Every other mode is
 * excluded.
 *
 * Exported for unit testing.
 */
export declare function shouldFetchDocsFor(task: GeneralizedTaskDefinition): boolean;
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 (**document key** → task IDs, D0084) from all
 * tasks' canonical doc refs — including the document keys that task-level
 * `PerspectiveDocRef`s expanded to during fetch (`perspectiveExpansion`) —
 * then intersects with the release impact's added/modified document keys
 * (`addedDocs`/`modifiedDocs`). Joining on the document key instead of `slug`
 * closes the id-ref blind spot: a task pinning a non-article only by `_id`
 * contributes a document key and is now attributable, where the slug join
 * silently skipped it.
 *
 * It reads only `releaseImpact.addedDocs`/`modifiedDocs` (the canonical-scoped
 * diff), so `releaseImpact.uncoveredDocs` — 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, manifest?: DocumentManifestEntry[]): ReleaseAutoScope | null;
