Build a regression suite + diff
A single plune run tells you the state now. To catch quality regressions — checks that used
to pass and no longer do — compare two runs with plune diff.
How the diff works
Section titled “How the diff works”plune diff takes two JSON run outputs (a baseline and a current) and classifies every eval
by its transition. Only a genuine passed → failed transition is a regression:
| Transition | Meaning | Counts as a regression? |
|---|---|---|
passed → failed | a check that used to pass now fails | yes |
failed → passed | improvement | no |
failed → failed | pre-existing failure | no |
errored (either side) | execution error, not a quality change | no |
Snapshot a baseline, then diff against it
Section titled “Snapshot a baseline, then diff against it”-
Save a baseline from a known-good state (e.g.
main). The diff needs JSON, so write it with--format json:Terminal window plune run --format json -o baseline.json -
Make your change — edit the prompt, swap the model, tune an assertion — then capture the current run:
Terminal window plune run --format json -o current.json -
Diff the two.
--fail-on-regressionmakes the command exit non-zero when apassed → failedtransition appears, so a script or CI step can gate on it:Terminal window plune diff baseline.json current.json --fail-on-regression
A Markdown diff is handy for humans; JSON is handy for tooling:
plune diff baseline.json current.json --format markdown -o diff.mdplune diff baseline.json current.json --format json -o diff.jsonThe JSON diff exposes a summary with hasRegression, regressions, and improvements — the same
fields the eval-action reads to drive its PR comment and gate.