Read evaluation reports¶
Read agreement with gold separately from execution health. A completed workflow
can disagree with gold, while an intended needs_review result can agree with
gold.
Start with the denominators¶
| Measure | Meaning |
|---|---|
| Check pass rate | Passed assertions divided by every declared assertion |
| Check coverage | Assertions that produced an observable pass or fail value |
| Case pass rate | Attempts in which every assertion passed |
| Failure rate | Attempts that failed operationally |
| Review rate | Attempts ending in needs_review |
source_case_count |
Distinct authored cases |
attempt_count |
Executions after applying repeat |
Missing, skipped, and error checks remain in the total. Do not remove them to
improve a rate. Repeated attempts keep the original case ID and add a one-based
repetition value.
Each check outcome has a specific meaning:
| Outcome | Interpretation |
|---|---|
passed |
Observed value agrees with gold under the configured comparison |
failed |
Observed value exists but disagrees with gold |
missing |
The expected public path is absent |
skipped |
The flow or step owning the path did not execute |
error |
Execution, result validation, or custom scoring prevented comparison |
Inspect the case's safe error_code, workflow status, transitions, then its flow
and step records. Reports never retain raw exception text.
Follow the requested and observed scope¶
target_workflow, target_flow, and target_step identify the requested suite
scope. A step target is always paired with its flow.
Flow and step summaries describe runtime observations, including nested callable flows:
observed_invocations,skipped_invocations,failed_invocations, andreview_invocationscount records.- Step identity is the pair
(flow, name), so equal local step names in different flows do not collide. invocation_pathidentifies an exact nested collection item. Repeated calls to one callable flow remain separate observations.- Decision summaries also report
model_selected_invocations,fallback_selected_invocations, andfallback_rate.
Workflow, flow, and step usage are overlapping views of the same calls. Never add them together. Root execution usage is the complete run total.
Read classification reports¶
A classification confusion matrix uses expected labels as rows and predicted labels as columns, in the declared catalog order. Per-label counts and rates use only valid observed predictions:
| Measure | Formula or scope |
|---|---|
| Accuracy | Correct observations divided by all supported attempts |
| Coverage | Valid observed predictions divided by all supported attempts |
| Precision | TP / (TP + FP) when defined |
| Recall | TP / (TP + FN) when defined |
| F1 | 2TP / (2TP + FP + FN) when defined |
| Micro | Pool TP, FP, and FN across labels first |
| Macro | Average each rate over the entire declared catalog; undefined if any label's rate is undefined |
support counts attempts with matching gold; excluded counts attempts without
gold at that metric path. Reports separately count observed, abstained,
missing, skipped, errors, and invalid. A null prediction is a valid label
only if the classification catalog explicitly declares null.
Read accuracy with coverage. One correct observed prediction and nine missing predictions gives 10% accuracy and 10% coverage, not perfect classification.
Read multilabel reports¶
Multilabel accuracy requires the entire predicted set to match. Per-label TP/FP/FN/TN and micro/macro rates cover valid observed sets. Missing and error attempts remain in support but do not become fabricated negative labels.
For imbalanced data, inspect per-label recall and source support before relying on one aggregate. Macro treats every declared label equally; micro weights every observed label decision.
Keep native and fallback measurements separate¶
For a decision fallback, score at least these distinct claims:
/flows/triage/steps/classify/result/answerability/status
/flows/triage/steps/classify/result/answer/optionId
/flows/triage/steps/classify/selection/category/id
/flows/triage/steps/classify/selection/origin
A fallback keeps the native answer unresolved. It may be correct application
policy without being a correct model classification. fallback_rate describes
policy use; it is not an accuracy metric.
Inspect latency and usage¶
Latency summaries report observed count, unavailable count, minimum, median,
p95, and maximum seconds. P95 uses nearest rank. Suite elapsed_seconds
includes scheduling and scoring and is not provider latency.
Usage summaries preserve known and unknown observations separately. A complete
total is null when any contributing value is unknown; a known subtotal remains
available for diagnosis. Unknown is never rewritten as zero. Cache-token counts
are provider-reported accounting and do not by themselves prove lower cost or
latency.
Replay retains original case timing and usage. Replay wall time measures rescoring and cannot support a provider-latency comparison.
Compare and diagnose¶
Offline comparison reports per-attempt improvements, regressions, mixed changes, and unchanged results, plus aggregate deltas. It verifies compatible inputs, gold, targets, scorers, metrics, and attempts before comparing. A successful comparison command means the comparison was produced, not that a candidate met a release threshold or statistical test.
Use this diagnosis order:
- Separate operational errors from valid reviews and gold disagreement.
- Compare workflow results with matching flow and step suites.
- If isolation passes but the workflow fails, inspect input bindings, projections, and routes.
- If isolation fails, inspect direct input, instructions, schemas, and provider behavior.
- Change one controlled variable on development cases.
- Confirm the selected variant once on an untouched holdout.
Detailed reports contain complete inputs, expectations, and public results. Keep them private, access-controlled, and out of ordinary CI artifacts.