/** * Reflection: zoom out and look at the whole board against its goal, in three lenses. * logical — does the flow hold together: reachability, dead ends, loops, decisions with no other path, contradictions * functional — can it actually be done: tools, checks, handoffs that carry what the next step needs, bounds on waits * goal — does it serve the stated purpose for the stated person: the chain to the outside party, the must-not guarded, * the intent against the allocation, the scale against the waits, who holds too much * Deterministic pass always; model pass on the same lenses when a model is available. Same output shape. */ import type { Board } from "./model.js"; import type { Complete } from "./interviewer.js"; export interface Reflection { lens: "logical" | "functional" | "goal"; severity: "error" | "warn" | "info"; title: string; why: string; about: string[]; fix?: string; source: "rules" | "model"; } export declare function reflectRules(b: Board): Reflection[]; export declare function reflectModel(b: Board, brief: string, complete: Complete): Promise; export declare function reflect(b: Board, brief: string, complete?: Complete | null): Promise<{ reflections: Reflection[]; via: "rules" | "model+rules"; }>; export declare function reflectionText(rs: Reflection[]): string;