/** * Rule conflict analyzer — detects permission rules that are effectively dead * due to Claude Code's rule evaluation order: deny → ask → allow (first match wins). * * Three conflict kinds: * shadowed-by-deny — ask or allow rule subsumed by a deny rule (never reached) * shadowed-by-ask — allow rule subsumed by an ask rule (never reached) * redundant — rule within the same bucket subsumed by a broader sibling */ import type { EffectiveSettings, ProvenanceRule } from './settings-merger.js'; export type RuleConflictKind = 'shadowed-by-deny' | 'shadowed-by-ask' | 'redundant'; export interface RuleConflict { kind: RuleConflictKind; /** The dead or redundant rule */ rule: ProvenanceRule; /** The rule that shadows it */ shadowedBy: ProvenanceRule; } /** * Analyze effective permission rules for conflicts. * * Rule evaluation order (Claude Code): deny → ask → allow (first match wins). * - deny always blocks * - ask always prompts * - allow only fires if nothing else matched first * * Returns an array of RuleConflict objects (empty if no conflicts found). */ export declare function analyzeRuleConflicts(effective: EffectiveSettings): RuleConflict[]; //# sourceMappingURL=settings-conflict-analyzer.d.ts.map