import type { Spec } from '../../types/spec/core.js';
export type Dimension = 'tests' | 'lint' | 'typecheck' | 'security-scan' | 'spec-compliance';
export type SkipReason = 'doc-only-scope' | 'meta-target' | 'no-source-files' | 'spec-config';
export interface SkippedDimension {
    dimension: Dimension;
    reason: SkipReason;
}
export interface ResolvedDimensions {
    applicable: Dimension[];
    skipped: SkippedDimension[];
}
/**
 * Resolves which holistic dimensions apply to the given spec.
 *
 * Rules (in priority order):
 * 1. scope === 'doc-only'         → only spec-compliance (all others: doc-only-scope)
 * 2. target in META_LIKE_TARGETS  → spec-compliance + security-scan (lint/tests/typecheck: meta-target)
 * 3. Everything else              → all 5 dimensions
 *
 * The `meta` target value used in the spec prose maps to 'infrastructure' | 'database' | 'shared'
 * in our actual SpecTarget type. Callers that need the `meta` semantic should store 'infrastructure'.
 */
export declare function resolveApplicableDimensions(spec: Pick<Spec, 'target' | 'scope'>): ResolvedDimensions;
/**
 * Normalise a dimension score sum over the applicable set.
 * Returns null when the applicable set is empty (no division by zero).
 */
export declare function normaliseScore(dimensionScores: Partial<Record<Dimension, number>>, applicable: Dimension[]): number | null;
//# sourceMappingURL=scope-resolver.d.ts.map