import type { ContentHash } from './decision-semantics.js'; export interface BoundaryProfile { /** Profile name, namespaced. e.g. 'aps:commerce:preflight' */ name: string; /** Semantic version of the profile */ version: string; /** Decision type this profile applies to */ decisionType: string; /** Sorted array of field paths that define decision identity */ fields: string[]; /** Optional description */ description?: string; } export type ProfileCompatibility = 'identical' | 'superset' | 'subset' | 'overlapping' | 'disjoint'; export interface ProfileComparisonResult { compatibility: ProfileCompatibility; sharedFields: string[]; onlyInA: string[]; onlyInB: string[]; } export type DecisionEquivalence = 'equivalent' | 'equivalent_on_intersection' | 'divergent' | 'divergent_on_intersection' | 'incomparable'; export interface DecisionComparisonResult { equivalence: DecisionEquivalence; profileA: string; profileB: string; profileCompatibility: ProfileCompatibility; /** Fields where the decisions agree (only populated for overlapping/identical) */ agreedFields?: string[]; /** Fields where the decisions diverge */ divergentFields?: string[]; /** If projected to intersection: hash of A on shared fields */ projectedHashA?: string; /** If projected to intersection: hash of B on shared fields */ projectedHashB?: string; } export interface ThresholdDistance { /** The metric being evaluated (e.g. 'risk_score', 'reputation_mu') */ metric: string; /** The threshold value that determines the boundary */ threshold: number; /** The actual computed value */ actual: number; /** Absolute distance from threshold: |actual - threshold| */ distance: number; /** Which side of the threshold: 'above' | 'below' */ side: 'above' | 'below'; } export interface ProfileTaggedDecision { /** The boundary profile used */ profileName: string; /** Content hash computed using the profile's field set */ contentHash: ContentHash; /** The raw decision fields (superset of profile fields) */ fields: Record; /** Optional threshold distances for boundary-adjacent decisions */ thresholdDistances?: ThresholdDistance[]; } //# sourceMappingURL=decision-equivalence.d.ts.map