/**
 * @fileoverview Classify · pure dry-run disposition helper.
 *
 * Honest, in-memory PREVIEW of how a source's EXISTING extracted ContentItemTags
 * would be dispositioned under its current taxonomy mode + thresholds. This is
 * NOT a fresh LLM run — it replays the deterministic, post-resolution routing
 * portion of the server's autotagger so operators can see the effect of mode +
 * thresholds before committing a real run.
 *
 * This module is intentionally framework-free (no Angular, no DI) so it can be
 * unit-tested in isolation. The Angular dialog builds the `resolve` closure from
 * cached taxonomy metadata (Tags / TagSynonyms) and feeds rows in here.
 *
 * NOTE: the server also has a semantic/embedding match tier that is NOT
 * reproducible client-side. Borderline rows ('none' here) may resolve
 * differently in a real run; the UI labels this clearly.
 */
/** Terminal outcome the server's tiered router would reach for a single tag. */
export type Disposition = 'auto-apply' | 'route-to-inbox' | 'create-new' | 'reject';
/** A single existing ContentItemTag being previewed. */
export interface DryRunInput {
    /** Free-text tag as extracted by the LLM. */
    tag: string;
    /** Resolved formal Tag ID if the server already linked it, else null. */
    resolvedTagId: string | null;
    /** ContentItemTag.Weight (0..1). */
    weight: number;
}
/** The effective source config that governs routing. */
export interface DryRunConfig {
    mode: 'constrained' | 'auto-grow' | 'free-flow';
    /** Score at/above which an auto-apply happens (0..1). */
    matchThreshold: number;
    /** Lower band: at/above this but below matchThreshold → route to inbox. */
    suggestThreshold: number;
}
/** Which resolution tier a tag landed in. */
export type ResolveTier = 'synonym' | 'exact' | 'fuzzy' | 'none';
/** Result of resolving a free-text tag against the cached taxonomy. */
export interface ResolveResult {
    tagId: string | null;
    tagName: string | null;
    /** 1.0 for synonym/exact, ~0.8 for fuzzy, null for none. */
    score: number | null;
    tier: ResolveTier;
}
/** A previewed disposition row, ready to render. */
export interface DryRunRow {
    tag: string;
    matchedTag: string | null;
    score: number | null;
    disposition: Disposition;
    reason: string;
}
/**
 * Preview the disposition of a batch of existing extracted tags under a config.
 * Pure and deterministic — given the same inputs + resolve function it always
 * returns the same rows in the same order.
 */
export declare function previewDispositions(input: DryRunInput[], cfg: DryRunConfig, resolve: (tag: string) => ResolveResult): DryRunRow[];
//# sourceMappingURL=classify.dryrun.d.ts.map