Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Design a regression test suite that catches an LLM feature getting worse when the prompt, model, or context changes. Use when asked to stop prompt changes breaking production, set up golden tests or CI gates for an LLM feature, or test a model/prompt upgrade before shipping it. Produces a golden case set, per-case pass criteria, CI gate thresholds, and a triage protocol for failures. For designing first-time evaluation of a new feature use ai-eval-plan instead.
.claude/skills/mohitagw15856-prompt-regression-suite/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 28% | 0% |
Every prompt tweak, model upgrade, and context change is a deploy. This skill designs the suite that runs on each one and answers a single question: did anything that used to work stop working?
Ask for (if not already provided):
Compose the set from four deliberate classes — not a random sample:
| Class | Purpose | Share | |---|---|---| | Core paths | The 5-10 inputs that represent most real traffic | ~40% | | Past failures | Every input that caused a bug, complaint, or incident — permanently | ~25% | | Edge & adversarial | Empty/huge inputs, wrong language, injection attempts, off-topic | ~25% | | Canaries | Cases pinned to behaviours you never want to change (refusals, format, tone) | ~10% |
Keep it small enough to run on every change (30-80 cases beats 500 nobody runs). Version it in git next to the prompt.
Choose the cheapest check that catches the regression:
Every case records: input, pass criteria, scoring method, and the baseline output at the time it was added.
llm-cost-latency-budget).When a case fails, classify before "fixing":
Trigger: runs on prompt edit / model bump / retrieval change] via CI job].
Golden set (n] cases):
| # | Class | Input (summary) | Pass criteria | Method | |---|---|---|---|---|
Gates: merge blocks when conditions]. Warnings on conditions].
Triage: the three-way protocol, with who owns updates to the golden set]
Maintenance: every production incident adds a case within period]; the set is reviewed for dead cases each quarter].
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 46,190 | 29,863 | -35% | 1 | 1 | 0% | 6,596 | 5,134 | -22% | 0 | 0 | — |
case-02 | fail→fail | 61,409 | 40,665 | -34% | 1 | 1 | 0% | 8,192 | 7,025 | -14% | 0 | 0 | — |
case-03 | fail→pass | 47,110 | 40,628 | -14% | 1 | 1 | 0% | 5,966 | 5,029 | -16% | 0 | 0 | — |
case-04 | fail→pass | 58,588 | 24,304 | -59% | 1 | 1 | 0% | 3,484 | 4,113 | +18% | 0 | 0 | — |
case-05 | pass→pass | 51,481 | 19,154 | -63% | 1 | 1 | 0% | 2,147 | 3,624 | +69% | 0 | 0 | — |
case-06 | pass→pass | 17,587 | 14,194 | -19% | 1 | 1 | 0% | 1,789 | 2,378 | +33% | 0 | 0 | — |
case-07 | pass→pass | 19,639 | 14,780 | -25% | 1 | 1 | 0% | 1,925 | 2,526 | +31% | 0 | 0 | — |
case-08 | fail→pass | 18,651 | 18,614 | -0% | 1 | 1 | 0% | 2,233 | 3,324 | +49% | 0 | 0 | — |
case-09 | fail→pass | 26,381 | 26,597 | +1% | 1 | 1 | 0% | 2,882 | 3,416 | +19% | 0 | 0 | — |
case-10 | pass→pass | 20,843 | 13,781 | -34% | 1 | 1 | 0% | 2,012 | 2,442 | +21% | 0 | 0 | — |
case-11 | pass→pass | 23,616 | 18,584 | -21% | 1 | 1 | 0% | 2,581 | 3,417 | +32% | 0 | 0 | — |
case-12 | fail→pass | 16,776 | 18,988 | +13% | 1 | 1 | 0% | 2,514 | 3,208 | +28% | 0 | 0 | — |
case-13 | pass→pass | 16,022 | 6,011 | -62% | 1 | 1 | 0% | 1,959 | 1,947 | -1% | 0 | 0 | — |
case-14 | pass→pass | 156,631 | 14,841 | -91% | 1 | 1 | 0% | 2,554 | 2,915 | +14% | 0 | 0 | — |
case-15 | pass→pass | 22,780 | 19,244 | -16% | 1 | 1 | 0% | 3,121 | 3,969 | +27% | 0 | 0 | — |
case-16 | pass→pass | 17,714 | 13,510 | -24% | 1 | 1 | 0% | 3,299 | 2,937 | -11% | 0 | 0 | — |
case-17 | pass→pass | 20,443 | 14,523 | -29% | 1 | 1 | 0% | 2,723 | 2,884 | +6% | 0 | 0 | — |
case-18 | pass→pass | 12,302 | 12,359 | +0% | 1 | 1 | 0% | 1,672 | 2,543 | +52% | 0 | 0 | — |
case-19 | pass→pass | 14,604 | 10,282 | -30% | 1 | 1 | 0% | 2,238 | 2,588 | +16% | 0 | 0 | — |
case-20 | pass→pass | 25,091 | 28,556 | +14% | 1 | 1 | 0% | 3,620 | 4,324 | +19% | 0 | 0 | — |
case-21 | pass→pass | 17,085 | 21,674 | +27% | 1 | 1 | 0% | 2,741 | 3,835 | +40% | 0 | 0 | — |
case-22 | pass→pass | 22,098 | 19,665 | -11% | 1 | 1 | 0% | 3,355 | 4,776 | +42% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.