Skip to content

Interpreting the diff

On each PR the Action runs your suite on the PR head and the base branch, then plune diffs them. The result shows up in three places: the sticky comment, the check status, and the action outputs.

Every eval is classified by how it moved between the base branch and the PR. Only a genuine passed → failed transition is a regression:

TransitionMeaningGates?
passed → failedregressionyes (when fail-on-regression: true)
failed → passedimprovementno
failed → failedpre-existing failureno
absent → failednew failure (new eval)no
errored (either side)execution error, not a quality changeno

The key idea: an eval that was already failing on the base branch does not turn the check red. Only quality you had and lost gates the merge.

The Action posts one comment per PR and updates it in place on every push — it never spawns duplicates. The body summarizes regressions and improvements; the headline is the same one-line summary exposed as an output: N regression(s), M improvement(s).

The Action exposes three outputs you can use in later steps:

OutputDescription
has-regression'true' when at least one passed → failed regression was detected
regressionsnumber of regressions
summaryone-line diff summary
- uses: plune-ai/eval-action@v1
id: plune
with:
config: plune.yaml
- name: Annotate
if: ${{ steps.plune.outputs.has-regression == 'true' }}
run: echo "::warning::${{ steps.plune.outputs.summary }}"