Reference

Scorecard JSON

The primary summary artifact, field by field.

scorecard.json is the typed summary every report renders from. EvalGlass ships dataclass contracts with to_dict / from_dict validation — this is a JSON contract, not a separate JSON Schema file.

Canonical snapshot

json

{
  "verdict": {
    "verdict": "informational",
    "ci_should_fail": false,
    "passing_gates": [], "failing_gates": [], "blocked_gates": [],
    "informational_metrics": ["exact_match", "structural_shape", "field_presence", "answer_nonempty"],
    "reasons": {}
  },
  "metrics": [
    { "metric": "exact_match", "aggregation": "mean", "value": 1.0,
      "included_count": 3, "status_counts": { "scored": 3, "non_evaluable": 2 } }
  ],
  "authority": {
    "exact_match": { "can_gate": false, "blocked": false, "level": "informational",
      "reasons": ["metric_status=informational", "threshold_proposed", "dataset_proposed"] }
  },
  "baseline_state": "comparison_not_requested",
  "diagnostics": [],
  "clusters": []
}

Fields

PathTypeMeaning
verdict.verdictenumVerdict: informational / pass / fail / blocked.
verdict.ci_should_failboolThe only CI signal; true for fail/blocked.
verdict.passing_gates · failing_gates · blocked_gatesstring[]Metric names per outcome.
verdict.informational_metricsstring[]Metrics that did not gate.
verdict.reasonsobjectPer-metric typed reason codes.
metrics[].metricstringThe metric name.
metrics[].aggregationenumAggregation used.
metrics[].valuenumber | nullAggregated over scored + valid; null when none — never 0.0.
metrics[].included_countintExamples that entered the math.
metrics[].status_countsobjectEvery status, counted (incl. excluded ones).
authority[m]objectcan_gate, blocked, level, typed reasons.
baseline_stateenumBaselineState.
diagnosticsarrayRun-level structured diagnostics.
clusters nextarrayAdditive (diagnostic clusters): failing/non-scored items grouped by shared Diagnostic.code, per metric. Emitted only when non-empty; recompute-verified on load. Built in the framework, not yet in the installed plugin.
No per-call identity here These metric objects are aggregates and carry no per-score subject identity. Per-call identity (example_id / unit_id, what view --by-call groups by) lives on the per-score records in RunRecord JSON.

Next steps