import { type ResolvedConfig } from "../types.js"; import { type PanelDef } from "./panels.js"; /** One panel's composed judge: its registry entry, and the prompt it judges by. */ export interface PanelRubric { def: PanelDef; /** Core rubric with this panel's vocabulary and the project extensions. */ text: string; /** max(core, panel, extension): the human-readable ledger field. */ version: number; /** Hand-off prose for the conditional {{handoff}} fill; "" except design-parity. */ handoff: string; } export interface Rubric { text: string; version: number; /** * The design hand-off instructions, held back rather than baked in. * * They are a quarter of the rubric and they apply only to a shot carrying a * `design:` reference, so every project without hand-offs was paying that much * of every judge prompt for the most nuanced passage in the document. The * prompt builder fills the `{{handoff}}` slot with this only when the batch * actually has one. */ handoff: string; } export declare const CATEGORIES: readonly ["render-failure", "layout-overflow", "alignment", "spacing", "hierarchy", "typography", "color-scheme", "contrast", "states", "responsive", "anatomy", "consistency", "composition", "a11y", "content", "design-parity", "taste"]; export type Category = (typeof CATEGORIES)[number]; export declare const SEVERITIES: readonly ["critical", "high", "medium", "low"]; /** * The whole rubric as one text: every panel's vocabulary in registry order. * The pipeline judges per panel now; this union remains for callers that want * the complete document (tests, and any prompt that reasons about the whole). */ export declare function loadRubric(resolved: ResolvedConfig): Promise; /** * One composed judge per panel: the shared core with only that panel's * vocabulary in the {{panel}} slot. Project extensions and neverFile lines * reach every panel (a hand-written rule may touch any lane; one a panel * cannot act on is harmless prose). The hand-off text rides only with * design-parity, so editing handoff.md invalidates only its entries, and the * declared direction is filled only into the panels flagged for it (taste), * so editing a DESIGN.md invalidates only theirs. */ export declare function loadJudges(resolved: ResolvedConfig): Promise;