/** * CLIFF / TIPPING-POINT detector — where does a tiny change make the result fall off a cliff? Most analyses * assume the response is smooth. Real processes aren't: a catalyst poisons past a temperature, a model * collapses past a learning rate, a material shatters past a load, a yield craters past a pH. These cliffs * are where disasters live — and a "best setting" sitting right on the edge of one is a setting that works * brilliantly today and fails the morning the room is 1° warmer. * * CLIFF scans your measurements for NEIGHBOURS that are close in settings but far apart in result — the * fingerprint of a cliff — and reports where they are, how big the drop is, and which knob you crossed. * Crucially, it flags when your OPTIMUM sits on a cliff edge: a loud warning to step back to a safer, * flatter setting even if it scores a hair lower. * * Honest by construction (DIAKRISIS): a cliff is detected only where two genuinely-near experiments disagree * far more than the typical local change AND the drop is a real fraction of your result range — measured * from your data, not assumed. It can't see a cliff hiding between samples you never took near; it reports * the ones your data actually straddles, and abstains when data is too thin. */ import { type Space } from "./space.js"; import { type Observation, type Goal } from "./engine.js"; export interface Cliff { at: Record; drop: number; steepness: number; variable: string; } export interface CliffReport { cliffs: Cliff[]; optimumOnCliff: boolean; note: string; } /** Find settings where a small change causes a big drop in result (cliffs / tipping points). */ export declare function analyzeCliffs(obs: ReadonlyArray, space: Space, _goal?: Goal): CliffReport; export declare function cliffGauntlet(): { score: 0 | 100; checks: Array<{ name: string; pass: boolean; detail: string; }>; }; //# sourceMappingURL=cliff.d.ts.map