Eval‑first: Bounding Claude Sonnet 4.5 Breaks with Testing
A reporting pipeline that translated natural language into structured API calls crashed after upgrading to Claude Sonnet 4.5. The model began folding the post_body payload into the description field and, when uncertain, asked clarifying questions. Because the downstream code expected a JSON object with a clear description, endpoint and post_body, the API calls failed, causing empty payloads or 500 errors.
The crash exposed a long‑standing issue: the prompt did not explicitly specify that the description must be a natural‑language string free of embedded request data. Earlier model versions had silently inferred this rule, but Sonnet 4.5’s stricter formatting caused a shift.
The team rolled back to 4.0, re‑qualified added integrations, and learned that traditional software release practices (change logs, unit tests) cannot bound the blast radius of an LLM component. The input space is unbounded and the model’s behavior unobservable to diff‑based checks.
They propose treating the evaluation suite as the system specification: a set of inputs, required properties, and a scoring function. Only if every new model version passes the entire eval suite can it be merged. This moves the safety boundary from random syntax checks to rigorous functional guarantees, even when the model’s internal reasoning is opaque.
While eval‑first introduces maintenance overhead and potential score variance, it remains the only systematic way to prevent regressions in black‑box generative components.