/**
 * Origin validator that produced the issue.
 */
export type ValidationSource = 'frontmatter' | 'unified-format' | 'readiness' | 'quality' | 'registry' | 'ears-gate' | 'specificity-gate';
/**
 * A hard blocking error. Callers must resolve all errors before the spec
 * can transition to 'approved' or have a PR created.
 */
export interface ValidationError {
    /** Stable code, screaming_snake_case (e.g. MISSING_FRONTMATTER_FIELD). */
    code: string;
    /** Human-readable description. */
    message: string;
    /** Dotted path inside the spec where the issue lives, e.g. 'frontmatter.id'. */
    path: string;
    /** Origin validator. */
    source: ValidationSource;
}
/**
 * A non-blocking issue. Same shape as ValidationError; severity is implicit
 * from array placement in ValidationResult.
 */
export type ValidationWarning = ValidationError;
/**
 * Unified result returned by validateSpecFormat().
 */
export interface ValidationResult {
    valid: boolean;
    errors: ValidationError[];
    warnings: ValidationWarning[];
    /** Optional summary metrics for callers that want them without re-running scorers. */
    metrics?: {
        readinessScore: number;
        qualityScore: number;
        qualityGrade: 'A' | 'B' | 'C' | 'D' | 'F';
        bddScenarioCount: number;
        criteriaCount: number;
    };
}
/**
 * Options for validateSpecFormat().
 */
export interface ValidateSpecFormatOptions {
    /**
     * When true, runs only fast structural checks (frontmatter shape, required
     * sections). Skips quality scoring.
     */
    fast?: boolean;
    /** Mode passed through to readiness-checker. Defaults to 'strict'. */
    readinessMode?: 'strict' | 'lenient';
    /** When true, skip quality scorer (e.g. for pre-commit speed). Defaults to false. */
    skipQuality?: boolean;
    /**
     * Optional reason for bypassing hard blockers. When set, all errors
     * are moved to warnings.
     */
    bypassReason?: string;
}
//# sourceMappingURL=validation.d.ts.map