import { RecordType } from './claim-evidence-types.js';
import type { ContestabilityReceipt } from './accountability/types/contestability.js';
/**
 * A contestation taints downstream receipts iff the controller has
 * upheld or remedied it. Filed/under_review contestations record a
 * dispute but do not yet justify cascade. Rejected/expired/abandoned
 * contestations never taint.
 */
export declare function isContestationTainting(c: ContestabilityReceipt): boolean;
export interface TaintedRecord {
    receiptId: string;
    recordType: RecordType;
    taintReason: string;
    /** 1 = direct reference to the contested action_id. 2+ = transitive. */
    taintDepth: number;
}
export interface TaintedSet {
    rootActionId: string;
    rootContestationId: string;
    tainted: TaintedRecord[];
}
export interface TaintCandidate {
    receiptId: string;
    recordType: RecordType;
    /** Receipt_ids this candidate depends on. The caller decides which
     *  of its own fields qualify as references. */
    references: string[];
}
export declare function computeDownstreamTaint(contestation: ContestabilityReceipt, candidates: TaintCandidate[]): TaintedSet | null;
//# sourceMappingURL=downstream-taint.d.ts.map