/**
 * Pure-function spec evaluator. The single code path every dimension's
 * score travels through.
 *
 * Same spec + same input → same `ScoreResult`, every time. No I/O, no
 * clock, no randomness. This is the determinism property dxkit's
 * scoring depends on for cross-process consistency and for agents to
 * verify expected score deltas after applying a fix.
 *
 * Algorithm:
 *   1. Apply each penalty whose `applies(input)` is true; accumulate
 *      deductions and a running score from `spec.baseline`.
 *   2. Clamp the raw score to [0, 100].
 *   3. Determine which caps apply; sort by ceiling ascending; the
 *      first (lowest-ceiling) cap that binds (i.e. final > ceiling)
 *      lowers the final score to that ceiling.
 *   4. Compute uplift for each surfaced action:
 *      - For deductions: bounded by the current cap (0 if a cap binds).
 *      - For the binding cap: distance to the next-applicable ceiling
 *        OR the post-clamp rawScore, whichever is lower.
 *   5. Build `topActions` by sorting deductions + cap by uplift desc.
 *      Annotate any action whose uplift crosses a rating boundary.
 */
import type { DimensionScoringSpec } from './spec';
import type { ScoreResult } from './result';
export declare function evaluateSpec<TInput>(spec: DimensionScoringSpec<TInput>, input: TInput): ScoreResult;
//# sourceMappingURL=evaluator.d.ts.map