/** * ACHIEVABILITY — is the target you WANT even reachable with the knobs you have? Every optimizer chases a * better number; none tell you when you're chasing one that the physics can't deliver. If your goal is * "yield ≥ 95%" but the best these variables can ever produce is ~88%, you can tune forever and never get * there — the answer isn't a better setting, it's a new lever (a variable you aren't yet controlling) or a * relaxed target. Knowing that EARLY saves weeks of doomed experiments. * * ACHIEVABILITY estimates the optimistic CEILING of your response over the whole variable space — a * Lipschitz (smoothness) upper bound built from your own measurements — and compares your target against it. * Target already met → achieved. Target below the ceiling → reachable, keep going. Target ABOVE even the * optimistic ceiling → likely out of reach with these variables; stop tuning, change the experiment. * * Honest by construction (DIAKRISIS): the ceiling is an OPTIMISTIC estimate from the smoothness of your data, * so "unreachable" means "above what your measurements can justify" — not a theorem of impossibility (a sharp * spike between samples could exceed it; that's exactly what exploration is for). It abstains when data is * thin, and it never cries "impossible" for a target your data already brackets. */ import { type Space } from "./space.js"; import { type Observation, type Goal } from "./engine.js"; export interface AchievabilityReport { target: number; bestSoFar: number; ceiling: number; feasibility: number; verdict: "achieved" | "reachable" | "unreachable" | "unknown"; note: string; } /** Estimate whether `target` is reachable for this objective given the measurements so far. */ export declare function assessAchievability(obs: ReadonlyArray, space: Space, target: number, goal?: Goal): AchievabilityReport; export declare function achievabilityGauntlet(): { score: 0 | 100; checks: Array<{ name: string; pass: boolean; detail: string; }>; }; //# sourceMappingURL=achievability.d.ts.map