Developer kit · Python + TypeScript · zero dependencies

Change a prompt without breakingwhat already worked.

You tweak the wording, eyeball two outputs, and ship — with no idea what you quietly broke for the other twenty cases. Swap a model and the surface area gets worse. The JSON your code depends on silently turns into prose; a fixed edge case comes back.

The Prompt Regression Lab brings regression testing to prompts: run a suite against your model, snapshot a baseline you commit to git, and diff every change. A case that passed before and fails now fails the build — so a quiet regression never ships.

Get the Kit — $89one-time · instant download · zero dependencies · yours to keep
What’s in the kit
Python engine — zero dependencies
TypeScript engine — dependency-free ESM
Deterministic check library
Baseline diffing
CI workflow + exit codes
Reports + docs
CI exit codes
ship = 0 · hold = 1 · regressed = 2
01.The Problem

Prompt iteration is mostly vibes.

You tweak the wording, eyeball two or three outputs, and ship — with no idea what you quietly broke for the other twenty cases. Swap a model or bump a version and the surface area gets worse. None of it shows up until a customer hits it.

Regular software has a fix: regression tests that fail the build when a change breaks something that worked. This kit brings that discipline to prompts — a committed baseline and a hard gate, so “looks fine to me” isn’t your release process.

JSON → prose

The structured output your downstream code parses silently becomes plain text after a wording change. Nothing errors — until the parser does, in production.

Format drift

A reply that was tight and on-format gets longer, chattier, or reorders its fields. No single test fails, but the contract your UI assumed quietly moved.

Old bugs return

An edge case you fixed last month comes back after an unrelated tweak. Without a baseline, regressions like this are invisible until someone reports them.

02.See It Catch One

Edit the prompt, watch the gate flip.

The baseline is prompt v1. Flip the current prompt to v2 — an innocent-looking edit — and watch the diff flag the cases that regressed and turn the verdict red. Same logic the real kit runs against your own model. (Simulation, no real model; it resets on reload.)

Simulation · no real model

Edit the prompt — catch the regression

baseline = v1 (committed)

Verdict: regressed

3/5 pass · 2 regressed · 2 drifted

A case that passed in the baseline now fails. CI fails (exit 2) until you fix it — or update the baseline on purpose.

CaseBaselineCurrentStatus
love_itpositive → JSONpassfailREGRESSED
terriblenegative → JSONpasspass
arrivedneutral → JSONpasspass
great_supportpositive → JSONpassfailREGRESSED
reply_lenreply ≤ 200 charspasspass

v2 dropped JSON formatting on the positive cases — easy to miss by eyeballing, caught instantly against the baseline.

This is a simulation — and it resets on reload.

The real kit runs your suite against your own model in Python or TypeScript, diffs against a baseline you commit to git, and fails CI (exit 2) on any regression. Deterministic checks, A/B compare, HTML report, zero dependencies, fully offline.

Get the Prompt Regression Lab — $89
03.What It Catches

Deterministic checks, plus the diff that names what moved.

Format & shape drift

JSON validity, field equality, regex, contains, equals, one_of — the structural contracts your downstream code depends on, asserted deterministically.

Length & latency

Max/min length and latency budgets, so a verbose or slow regression fails the gate before a user ever feels it.

Regressions vs baseline

A case that passed in the committed baseline and fails now — the headline signal. It fails the build (exit 2) so it can't ship quietly.

Fixes & drift

Cases that newly pass (fixes) and outputs that changed without flipping pass/fail (drift), so nothing in the suite changes silently.

A/B compare

Two prompts or two models over the same suite, with the winner on weighted pass rate and exactly which cases differ between them.

Optional LLM judge

A bring-your-own judge for subjective checks (tone, helpfulness) that augments — but never gates — the deterministic core.

04.What's Inside

Two engines, fully tested, at parity.

Python engine — zero dependencies

Checks, cases, runner, baseline diff, scoring, A/B compare, and a CLI. No third-party packages; runs in air-gapped CI.

TypeScript engine — dependency-free ESM

The same checks, scoring, baseline diff, and verdict, matched to the Python behavior — for JS/TS stacks DeepEval can't serve.

Deterministic check library

contains / regex / equals / one_of / json_valid / json_field / length / latency — plus an optional BYO LLM judge that never gates the core.

Baseline diffing

Snapshot to a committed JSON file; every run reports regressions, fixes, output drift, and new or removed cases.

CI workflow + exit codes

A GitHub Actions file and ship=0 / hold=1 / regressed=2 exit codes that drop straight into any pipeline.

Reports + docs

Console and HTML reports, a guide to writing checks that catch real breakage, and an honest comparison to promptfoo / DeepEval / Braintrust.

05.How It Works

Four steps, then it runs itself.

1
Write a suite

List the inputs you care about and the deterministic checks each output must pass. Author it in code or JSON.

2
Snapshot a baseline

Run once against your model and commit baseline.json to git — your golden record of what currently passes.

3
Run and diff

On every change, the kit reruns the suite and diffs against the baseline: regressions, fixes, and drift.

4
Gate CI

A regression fails the build (exit 2). Update the baseline deliberately when a change is a genuine improvement.

06.Straight Talk

What this is — and isn’t.

This is a pre-ship regression gate, not an observability platform: no tracing, dashboards, run history, or production monitoring — pair it with Braintrust or LangSmith for those. It ships a focused, deterministic check library, not fifty scored metrics; for G-Eval-style grading, pair it with DeepEval or RAGAS. It doesn’t call a model for you — you wire your own target, which is what makes it model-agnostic.

And a SHIP verdict is only as good as the cases you write: it means “nothing regressed and you cleared your bar,” not “this prompt is objectively good.” The kit is small enough to read end to end — which matters for a tool that decides what ships.

08.Common Questions

The questions engineers actually ask before wiring it in.

It runs a suite of test cases against your LLM app, snapshots the pass/fail results to a baseline you commit to git, and on every later run diffs against that baseline. A case that passed before and fails now is a regression — and the kit fails your CI build (exit code 2) so it can't ship silently. It's regression testing for prompts and models, not open-ended 'is this good' scoring.

Python + TypeScript · baseline · CI gate · $89

Ship prompts like you ship code.

A baseline, a diff, and a hard CI gate — in Python and TypeScript, zero dependencies. One-time $89, yours to keep.

Sold by RedHub AI LLC · Secured by Stripe · redhub.ai