/**
 * Port: Where task definitions come from.
 *
 * Adapters:
 * - ContentLakeTaskSource — GROQ query against Sanity Content Lake
 * - RepoTaskSource — reads .ailf/tasks/*.task.ts files
 * - TsTaskFileLoader — reads tasks/{mode}/*.task.ts (eval package)
 *
 * The key invariant: the pipeline orchestrator and all downstream steps
 * work with GeneralizedTaskDefinition[] regardless of where they came from.
 */
import type { GeneralizedAssertionDefinition, GeneralizedDocRef, GeneralizedTaskDefinition, GeneralizedTemplatedAssertion, IdDocRef, PathDocRef, PerspectiveDocRef, SlugDocRef } from "../types/generalized-task.js";
import type { FilterOptions } from "../types/index.js";
/** Check if a doc ref resolves by slug.
 *
 * Excludes IdDocRef (which may carry an optional `slug` for display).
 * When both `id` and `slug` are present, it's an IdDocRef, not a SlugDocRef.
 */
export declare function isSlugRef(ref: GeneralizedDocRef): ref is SlugDocRef;
/** Check if a doc ref resolves by path.
 *
 * Excludes IdDocRef (which may carry an optional `path` for display).
 * When both `id` and `path` are present, it's an IdDocRef, not a PathDocRef.
 */
export declare function isPathRef(ref: GeneralizedDocRef): ref is PathDocRef;
/** Check if a doc ref resolves by document ID.
 *
 * Uses `"id" in ref` as the primary discriminator. IdDocRef may also carry
 * optional `slug` and `path` for display purposes, so we cannot exclude
 * on those keys. When both `id` and `slug` are present, `id` wins.
 */
export declare function isIdRef(ref: GeneralizedDocRef): ref is IdDocRef;
/** Check if a doc ref resolves by content release perspective */
export declare function isPerspectiveRef(ref: GeneralizedDocRef): ref is PerspectiveDocRef;
/**
 * Extract a display identifier from any doc ref.
 * Useful for logging, error messages, and retrieval metrics.
 */
export declare function canonicalDocRefLabel(ref: GeneralizedDocRef): string;
/** Check if an assertion uses the templated format (template + criteria) */
export declare function isTemplatedAssertion(entry: GeneralizedAssertionDefinition): entry is GeneralizedTemplatedAssertion;
/**
 * Port: Where task definitions come from.
 *
 * The pipeline never knows HOW tasks are loaded — it only sees
 * GeneralizedTaskDefinition[]. The adapter handles YAML parsing, GROQ
 * queries, filesystem scanning, etc.
 */
export interface TaskSource {
    /**
     * Load task definitions, optionally filtered by area/task.
     *
     * @param filter — Area, task ID, or changed-doc filters
     * @returns Validated task definitions ready for expansion
     */
    loadTasks(filter?: FilterOptions): Promise<GeneralizedTaskDefinition[]>;
}
