/**
 * Inter-critic / inter-pass orthogonality.
 *
 * Detects redundant ensembles. When you run N critics (or N audit passes,
 * or N specialized agents) on the same input, you want them to disagree —
 * each contributing distinct signal. If they all converge on the same set
 * of findings, you're paying N× cost for ~1× signal.
 *
 * The metric is `1 − mean pairwise cosine similarity` over bags of words
 * extracted from each pass's outputs. 1.0 = fully orthogonal,
 * 0.0 = fully redundant.
 *
 * Universal primitive: pass anything that produces text (findings, tool
 * calls rendered as JSON, verdict strings) and the matcher derives its own
 * vocabulary.
 */
export interface OrthogonalityInput<T> {
    passes: Array<{
        findings: T[];
    }>;
    /** Render one element to text. Default: defaultRender (concatenates string fields). */
    text?: (item: T) => string;
    /** Minimum token length kept in the bag. Default 4 (drops short fillers). */
    minTokenLength?: number;
}
export interface OrthogonalityResult {
    /** 1 − mean pairwise cosine similarity across passes. 1=fully orthogonal, 0=fully redundant. */
    orthogonality: number;
    /** Number of passes considered. */
    passCount: number;
    /** Pairwise cosine similarities, in upper-triangular order (for debugging). */
    similarities: number[];
}
export declare function passOrthogonality<T>(input: OrthogonalityInput<T>): OrthogonalityResult;
//# sourceMappingURL=orthogonality.d.ts.map