EvalGlass

Scorecards

A scorecard your team can actually read.

A scorecard is the bounded, readable claim of an EvalGlass run: one verdict, metric values, status counts, authority, baseline state, and what cannot yet be claimed.

Every run shows what was measured, what changed, what can be claimed, and what still needs review. It is the artifact your coding agent hands back — readable by an engineer, a product owner, or a manager, without confusing “measured” with “approved.”

An example scorecard

model-switch run · vs. last baseline informational
Retrieval faithfulness0.91 +0.07
Tool selectionstable
Workflow-policy answers0.74 −0.11
Cost / call−18%

Verdict: informational — the new synthetic cases need review before they can gate CI. No threshold is approved yet, so nothing fails the build. This is an illustrative example, not a measured result.

the same run, as scorecard.json

{
  "verdict": { "verdict": "informational", "ci_should_fail": false },
  "metrics": [
    { "metric": "retrieval_faithfulness", "value": 0.91, "status": "scored", "validity": "valid" },
    { "metric": "workflow_policy", "value": 0.74, "status": "scored", "validity": "valid" }
  ],
  "status_counts": { "scored": 2, "blocked": 0, "non_evaluable": 0, "skipped": 0, "error": 0 },
  "authority": { "retrieval_faithfulness": "no_approved_threshold" },
  "baseline_state": "comparable"
}

The verdict is informational because no threshold is approved — the numbers are earned, the authority to gate on them has not been granted. That distinction is the whole point. The precise, typed version →

The HTML report next

The same typed scorecard, rendered as a shareable report.html written into your repo beside scorecard.json and report.md — a verdict hero, KPI tiles, per-metric confidence-interval bands, a delta vs. the previous run, and a panel spelling out what the run does not claim. It is a rendering of the record, never a second verdict.

report.html · customer-facing agent · nightly vs. last baseline

Measured — not approved.

informational
scored
4 / 4
approved gates
0
median n_eff
40
baseline
comparable
Retrieval faithfulness0.86 · 95% CI [0.71–0.94] · n_eff 42 · Δ +0.05
Workflow-policy answers0.74 · 95% CI [0.58–0.86] · n_eff 39 · Δ −0.11

What this run does not claim

Not that your AI is correct, safe, or production-ready. No gate is approved, so nothing here fails a build. Both metrics sit with a lower confidence bound under the 0.80 threshold — evidence still to gather, not a verdict.

Violet marks the 95% interval, the dot is the point value, the vertical tick is the approved threshold. A gate reads the lower end of the interval, not the point — why a perfect score can still miss the bar →. This is an illustrative example, not a measured result.

What a scorecard shows

Those project-specific checks come from metric discovery: it reads your code, output schema, and prompts — across any agentic framework — to draft metrics anchored to how your app fails, and can seed a structural floor straight from your output schema, so a first scorecard shows real signal even before you have a single trace. That floor is contract-tier: it catches a malformed output, never proof the answer is good. Discovered metrics land proposed; you validate before any of them gate.

The four outcomes

A scorecard resolves to exactly one verdict. Green means a pass on an approved gate — nothing more. A fresh run is informational, never “passing.”

informational pass fail blocked

Regression & comparison

A score change is a regression only when the two runs are comparable. If they aren’t, EvalGlass says so and names the dimension that differs — it does not call the delta a regression. That is what makes a model-switch or prompt-change verdict trustworthy. On the epistemic core, a paired delta counts as a regression only when its interval clears zero; a change inside the interval is within_noise, not a regression.

Confidence, not just a number experimental

A score is not a bare number. On the evolving epistemic core, each metric carries an Estimate — a point value, a confidence interval, and an effective sample size (n_effective), computed with Wilson or Student-t. A number with no sample size and no interval is not evidence — it is an anecdote with a decimal point.

A Decision Policy gates on the lower confidence bound (LCB), not the hopeful point — the upper bound for lower-is-better metrics. It reads the edge of the interval that could hurt you.

A perfect 3/3 does not gate

Three-for-three is a point of 1.0 — but its 95% lower bound is ~0.44, so against a 0.8 threshold it fails the default gate. Not a bug: three lucky samples have not earned the claim. Gather more evidence and the interval tightens until the lower bound clears the bar. Illustrative example, not a measured result.

The escape hatch is explicit and named: a policy that sets decision_statistic: point — a point-smoke check for dev — decides on the point instead. A deliberate, recorded choice, never the silent default.

Authority is capability-typed: an uncalibrated or fake judge produces evidence, not authority, so it can never move a gate. And the judge is content-addressed — a swapped judge reads drifted until it is re-approved against the exact rig. A pass you can trust is a pass the evidence actually earned.

The version the plugin installs today still gates on the point threshold (now); the interval / lower-bound rule here is the experimental layer being hardened in the framework — surfaced so the rule is legible before it ships, never presented as today’s default. A companion trust page, Statistical honesty, goes deeper.

Cluster the failures next

When a metric fails, the scorecard groups its failing and non-scored items by their shared Diagnostic.code, per metric — so “workflow-policy 0.74” becomes an actionable failure mode: the cases that failed share one cause. A non-scored item is grouped by cause, never coerced to 0.0. This groups failure instances by cause — a different axis from the still-planned metrics explorer’s call-identity view.

workflow-policy answers · clusters informational
missing_citation7 cases
refused_in_scope3 cases
tool_arg_shape · non-scored2 grouped by cause

The cases that failed are mostly missing-citation — one fix, not twelve. The two non-scored items are grouped by their cause, not written as 0.0. Illustrative example, not a measured result.

What a scorecard cannot prove.

It is not a certificate. It is not “safe AI.” It is not proof every behavior was covered. And it is not a pass unless a gate is approved and validly measured. A scorecard makes AI behavior reviewable without overclaiming — you decide what counts. What green does not mean →

Where scorecards go

Related

How it works
the check loop, end to end
Reading a scorecard
the mental model: verdicts, validity, and what green doesn't license
Use cases
the moments a scorecard answers
Read a scorecard (docs)
the typed, precise version
Get the plugin
two commands in Claude Code