import type { DecisionNode } from "./decision-graph.js"; export interface DiffAddedLine { line: number; content: string; } export interface ParsedDiffFile { file: string; addedLines: DiffAddedLine[]; } export interface DesignReviewFinding { file: string; line: number; severity: "info" | "warn" | "error"; rule: string; message: string; suggestion?: string; governed_by?: { id: string; statement: string; }; } export interface DesignReviewResult { verdict: "pass" | "warn" | "fail"; findings: DesignReviewFinding[]; applicable_decisions: Array<{ id: string; statement: string; scope: string; }>; governed_findings?: Array<{ decision_id: string; file: string; line: number; rule: string; }>; severity_policy?: { fail_on?: string[]; fail_on_governed?: boolean; }; checks_skipped?: Array<"color-tokens" | "spacing-tokens" | "typography-tokens">; note?: string; stats: { files_changed: number; ui_files: number; added_lines_checked: number; }; } export type PolishKind = "color" | "spacing" | "font"; export interface ProposedPolishChange { file: string; line: number; before: string; after: string; token: string; kind: PolishKind; substitutions?: Array<{ token: string; kind: PolishKind; }>; } export interface PolishResult { verdict: DesignReviewResult["verdict"]; findings: DesignReviewFinding[]; proposed_changes: ProposedPolishChange[]; patch: string; manual: Array<{ file: string; line: number; summary: string; why: string; }>; post_polish: { findings_resolved: number; findings_remaining: number; remaining: string[]; }; decisions: DesignReviewResult["applicable_decisions"]; checks_skipped?: DesignReviewResult["checks_skipped"]; note?: string; } export declare const FAIL_ON_RULES: readonly ["important", "bare-hex-color", "hardcoded-font-size", "hardcoded-font-family", "hardcoded-spacing"]; export interface SeverityPolicy { failOn?: string[]; failOnGoverned?: boolean; } export declare function parseUnifiedDiff(diff: string): ParsedDiffFile[]; export declare function reviewDiff(diff: string, designMd: string | null, decisions: DecisionNode[], project?: string, policy?: SeverityPolicy): DesignReviewResult; export declare function proposePolish(diff: string, designMd: string | null, decisions: DecisionNode[], project?: string): PolishResult; export declare function decisionsForPaths(paths: string[], decisions: DecisionNode[], project?: string): DecisionNode[];