A prompt that has been tuned for months is a load-bearing part of a system.
It is also a single string that anyone can edit, with no compiler to object.
Regression testing treats it accordingly: every change runs the eval set and compares with the previous run.
The immediate complication is that model output is not deterministic.
Even at temperature zero, wording varies with batching and provider-side changes.
So the comparison cannot be over strings and has to be over scores.
The right unit is the per-case result, not the aggregate.
An average that is unchanged can hide five cases improving and five getting worse.
Reporting which specific cases flipped from pass to fail is what makes the test actionable.
Because scores are noisy, a small difference is not evidence of anything.
Running each case several times and comparing distributions is the honest version.
Cost forces a compromise, so most teams run a small critical set often and the full set before release.
The other trigger is a model change, and it is the one people forget.
A provider updating a model silently changes your system, so the same suite must run against a new version before adopting it.
Pinning to a dated model version and upgrading deliberately is what makes that possible at all.