Configuration

evalship works without configuration. To change its behavior, add .evalship.yml to the root of your repository.

evalship reads the file at the commit it is processing. A pull request that changes .evalship.yml is evaluated with its own version of the file.

All keys with their defaults

comparison:
  tolerance: 0.05
  suites: {}

gate:
  fail_on_new_failures: false
  max_pass_rate_drop: null
  ignore_flaky: true

comment:
  enabled: true
  only_on_change: false

results:
  artifacts: []

comparison

Key Type Default Effect
tolerance number 0.05 A score change counts as regressed or improved only when the absolute difference is larger than this. Also used for flakiness: a case whose scores vary with a standard deviation above twice the tolerance is flaky.
suites map {} Settings per suite name. Each suite accepts tolerance (number) and required (true or false).

A suite with required: true fails the check when it has no results for a commit, for example because its workflow didn't run. Setting it also turns the check from advisory into a gate (see below).

comparison:
  tolerance: 0.05
  suites:
    support_bot:
      tolerance: 0.1
      required: true

Suite names are the names in the comment's suite table. Result formats explains how each format derives them.

gate

The evalship check is neutral unless at least one of these is set: fail_on_new_failures: true, a number for max_pass_rate_drop, or required: true on a suite. Once one is set, the check concludes success or failure.

Key Type Default Effect
fail_on_new_failures boolean false Fail the check when any eval went from passing to failing against the baseline.
max_pass_rate_drop number or null null Fail the check when the pass rate dropped by more than this many percentage points against the baseline. 2 allows 95.8% to 93.8%, not lower.
ignore_flaky boolean true Detect flaky evals and leave them out of regressions, improvements and the gate. When flaky evals are involved, max_pass_rate_drop is measured on the non-flaky evals only. false turns flakiness detection off, so every flip counts.

See How PR analysis works for baselines and flakiness.

comment

Key Type Default Effect
enabled boolean true false stops PR comments. The evalship check is still posted.
only_on_change boolean false true skips the comment when nothing changed against the baseline. A pull request that already has an evalship comment still gets it updated.

results

Key Type Default Effect
artifacts list of strings [] Artifact name globs to read results from, such as evalship-results or evals-*. Empty means every artifact is scanned for result files.

Validation

Mistakes don't stop evalship; it falls back to defaults and tells you.

Problem What happens
Unknown section or key Ignored.
Wrong type, such as tolerance: "high" The default is used for that key.
Invalid entry under comparison.suites That entry is dropped; valid entries are kept.
File is not a mapping, or not valid YAML All defaults are used.

Problems are listed in the evalship check output under ".evalship.yml has problems, so defaults were used for these keys". The repository's settings page on evalship shows the same list and the effective configuration of the latest run.

Examples

Block pull requests that break evals, ignoring flaky ones:

gate:
  fail_on_new_failures: true

Allow small pass rate dips, but always require the safety suite:

gate:
  max_pass_rate_drop: 2
comparison:
  suites:
    safety:
      required: true

Comment only when something changed, and read one artifact:

comment:
  only_on_change: true
results:
  artifacts: [evalship-results]

A check that blocks merging also needs a branch protection rule or ruleset on GitHub that requires the evalship check. A neutral check never blocks a merge.