/**
 * Pipeline step: fail fast when explicitly selected tasks are non-viable.
 *
 * When a run selects tasks by id (`--task` / `PipelineRequest.tasks`) against
 * the Content Lake, the runner reads them under the **published** perspective.
 * A task that exists only as an unpublished draft (or is archived) resolves to
 * zero rows, and without this step the failure only surfaces three steps later
 * at `generate-configs` with the ambiguous "No literacy tasks match the current
 * filters" — after a runner spin-up and a doc fetch.
 *
 * This step runs before fetch-docs and names each offending id with a precise,
 * actionable reason, so the abort happens up front and the persisted
 * `ailf.evalRequest.error` is something a user can act on.
 *
 * Scope: only explicit `--task` selection against a `content-lake` source. The
 * viability decision uses the same adapter + perspective the runner uses
 * (`ctx.taskSource.loadTasks`); the reason is enriched via a best-effort
 * drafts-visible probe. Area/tag-only selections keep the existing
 * generate-configs zero-task handling, which also remains as a backstop.
 */
import { type AppContext, type PipelineStep, type StepResult, type ValidationIssue } from "../../_vendor/ailf-core/index.d.ts";
export declare class ValidateTaskViabilityStep implements PipelineStep {
    readonly name = "validate-task-viability";
    check(): ValidationIssue[];
    execute(ctx: AppContext): Promise<StepResult>;
}
