# Outcome scorecard

Measure the desk before an agent goes live, then report what changed. Task completion, recovery, safety violations and cost per outcome come from the trust ledger, and value is priced at the measured baseline instead of assumed minutes.

A value report that multiplies resolutions by an assumed number of minutes tells you what was assumed, not what changed. The outcome scorecard measures the desk before an agent goes live and compares what happens after.

## The baseline

`POST /api/governance/scorecard/{agent}/baseline` (`agents.update`) measures the desk over the last `days` (default 30), optionally only in some `categories`:

- tickets resolved, and resolved per day;
- median and 90th-percentile handle time, from created to resolved;
- reopen rate;
- the open backlog.

Send `staff_cost_usd`, what the desk's people cost over those days, and the baseline records a **measured** cost per resolution. Without it, the cost model's figure is used and marked `assumed`.

A baseline records `pre_deploy`: whether the agent had no receipted action yet when it was taken. One taken after go-live is kept but flagged. A baseline is never silently overwritten; send `replace: true`, and the one it replaces stays in its history. Each baseline is receipted on the [trust ledger](/docs/govern/trust-ledger) and audited as `agent.scorecard.baseline`.

A background pass captures a baseline automatically for every agent that has neither a baseline nor a receipted action, so a new agent is measured before its first action.

## The scorecard

`GET /api/governance/scorecard/{agent}?days=30` (`agents.read` and `analytics.read`) reads its counts from the trust ledger, so every number is backed by receipts an auditor can verify. Receipts that no longer verify are left out.

| Measure | How it is counted |
| --- | --- |
| Task completion rate | Actions that ran and succeeded (not refused, rejected, failed, or found missing by a read-back) over all actions attempted |
| Recovery rate | Of the runs that hit a failed action, the share that went on to complete an action in the same run |
| Safety violations | Unsafe reviewer verdicts on the agent's work, plus actions a policy, guardrail or kill switch refused |
| Cost per outcome | The agent's spend over its outcomes: tickets it resolved plus actions that completed |
| vs baseline | Handle time, reopen rate, backlog and cost per resolution, each as the agent's figure minus the baseline's |
| Value | The agent's resolutions priced at the baseline's cost per resolution, marked `measured` or `assumed` |

## The value report

When an agent's baseline has a measured cost per resolution, the value report (`GET /api/analytics/value`) prices that agent's resolutions with it instead of the cost model, and marks the row `value_basis: "measured"`. Agents without one keep the cost model and read `assumed`.
