import { type CompileFeasibilityInput, type FeasibilityIR } from '../feasibility/index.js';
import type { DimensionDeclaration, DimensionClassification, DimensionNarrowingResult } from './types.js';
/** Registry format version. Bump on any breaking change to the declarations. */
export declare const SCOPE_REGISTRY_VERSION = "1.0.0";
/** The canonical dimension set this registry ships, sorted by id. */
export declare const CANONICAL_DIMENSIONS: readonly DimensionDeclaration[];
/** A scope dimension registry: a sorted, de-duplicated set of declarations. */
export interface ScopeDimensionRegistry {
    version: string;
    /** Declarations, sorted by id. */
    dimensions: DimensionDeclaration[];
    /** sha256 hex of the canonical declarations. Lets a consumer pin a registry. */
    registryHash: string;
}
/** Build a registry from a set of declarations. Defaults to CANONICAL_DIMENSIONS.
 *  Rejects duplicate ids and any non-decidable dimension marked 'strict'
 *  (a 'text' value type can never be strictly enforced). Deterministic. */
export declare function buildRegistry(dimensions?: readonly DimensionDeclaration[]): ScopeDimensionRegistry;
/** Partition a registry into the strict decidable dimensions (routed into the
 *  M6 hard check) and the advisory dimensions (excluded, reported, never
 *  silently dropped). Mirrors the checks_run / checks_skipped convention. */
export declare function classifyDimensions(registry: ScopeDimensionRegistry): DimensionClassification;
/** Compile the strict decidable dimensions into the M6 feasibility obligation.
 *  This is a thin pass-through to compileFeasibility: the registry classifies
 *  and routes, M6 emits the obligation. The advisory dimensions are NOT part
 *  of the returned IR; the classification reports them separately. */
export declare function compileStrictDimensions(input: CompileFeasibilityInput): FeasibilityIR;
/** Check that a child set-valued dimension value is a subset of the parent
 *  value: the partial order all strict set-valued dimensions narrow under.
 *  Authority may only narrow. A child member the parent did not grant is a
 *  widening and fails the check.
 *
 *  Advisory dimensions return status 'not_applicable' and narrows=false: they
 *  are not decided here and cannot be the basis of a hard deny. */
export declare function checkSetNarrowing(declaration: DimensionDeclaration, parentValue: string[], childValue: string[]): DimensionNarrowingResult;
/** Whether an advisory dimension may be the basis of a hard deny.
 *  Always false. This is the registry's central invariant: advisory
 *  dimensions never hard-deny. Strict decidable dimensions deny through the
 *  M6 obligation, not through this predicate. */
export declare function canHardDeny(declaration: DimensionDeclaration): boolean;
//# sourceMappingURL=registry.d.ts.map