import type { BoundaryProfile, ProfileComparisonResult, DecisionComparisonResult, ProfileTaggedDecision, ThresholdDistance } from '../types/decision-equivalence.js';
export declare const CANONICAL_PROFILES: Record<string, BoundaryProfile>;
/**
 * Resolve a profile by name. Returns the canonical profile or undefined.
 */
export declare function resolveProfile(name: string): BoundaryProfile | undefined;
/**
 * Register a custom boundary profile.
 * Custom profiles must be namespaced (contain ':').
 */
export declare function registerProfile(profile: BoundaryProfile): void;
/**
 * Compare two boundary profiles to determine compatibility.
 * This is a static analysis — no runtime negotiation.
 */
export declare function compareProfiles(a: BoundaryProfile, b: BoundaryProfile): ProfileComparisonResult;
/**
 * Compare two profile-tagged decisions for equivalence.
 *
 * - Same profile, same hash → equivalent
 * - Same profile, different hash → divergent
 * - Overlapping profiles → project to intersection, compare
 * - Disjoint profiles → incomparable
 *
 * No runtime negotiation. Static projection.
 */
export declare function compareDecisions(a: ProfileTaggedDecision, b: ProfileTaggedDecision): DecisionComparisonResult;
/**
 * Compute the threshold distance for a metric.
 * This records proximity to a decision boundary — the protocol
 * exposes this, it does NOT resolve divergent thresholds.
 */
export declare function computeThresholdDistance(metric: string, actual: number, threshold: number): ThresholdDistance;
/**
 * Tag a decision with a boundary profile.
 * Extracts the profile's field set from the raw decision fields
 * and computes the content hash over those fields.
 */
export declare function tagDecisionWithProfile(profileName: string, fields: Record<string, unknown>, thresholdDistances?: ThresholdDistance[]): ProfileTaggedDecision;
/**
 * Compute the decision question hash — the cross-system invariant.
 * This hashes only the QUESTION being asked, not the answer.
 * Two systems asking the same question produce the same hash
 * regardless of how they evaluate it.
 */
export declare function computeDecisionQuestionHash(fields: Record<string, unknown>, profileName: string): string;
/**
 * Check if two decisions are asking the same question.
 * This is the minimal invariant — true means the decisions
 * are about the same thing, regardless of evaluation outcome.
 */
export declare function isSameDecisionQuestion(a: ProfileTaggedDecision, b: ProfileTaggedDecision): boolean;
//# sourceMappingURL=decision-equivalence.d.ts.map