# Evidence

> Why edges, signals, inferred labels and outcomes carry an evidence tier, and how to choose one.

Records of agent runs mix facts of very different strength. A test suite that passed is not the same as an agent that said "done", and an edge copied from a spawn record is not the same as an edge guessed from timestamps. OCP keeps the difference in the data: every edge, signal and inferred label carries an **evidence tier**, and an outcome may carry one too.

## The tiers

| Tier | Meaning | Example |
|---|---|---|
| `verified` | Mechanically checked. | Tests ran and passed; a spawn edge read from the harness's own parent id. |
| `reported` | A typed report, from the component itself or from another that judged it. | A reviewer agent's accept or reject; a model name from the harness's configuration. |
| `heuristic` | Inferred by a rule. | An edge inferred from timestamps and folders; a task type assigned by a labeling model. |
| `asserted` | A bare claim, with nothing behind it. | An agent's final message saying the work is complete. |

Two enums use these words. Inferred structure (edges, origins, roles, phases, model ids, artifact kinds) uses `verified`, `reported` or `heuristic`. Judgements (signals, preferences, task labels) can also be `asserted`, and so can an outcome's `evidence`, which is open vocabulary with these four words recommended. See [Evidence tiers](https://orchestrationcontextprotocol.io/specification/0.3/attempts#evidence-tiers).

## Rules of thumb for producers

- **Missing evidence is `asserted`.** A reader treats an outcome without evidence as the weakest tier, so write the tier whenever you know it.
- **Never upgrade a tier without new mechanical evidence.** If a reviewer said "accept", that is `reported`, however trustworthy the reviewer is. If you then run the tests, write a new signal with `verified`.
- **Name what produced the verdict.** `outcome.via` names the gate or review node, and `receipt` holds a short label such as `tests pass 42/42`.
- **Prefer the harness's own records.** A parent id the harness wrote is `verified`; the same link rebuilt from timestamps is `heuristic`.

## How consumers use tiers

A consumer weighs evidence by tier. A learner might trust a `verified` success more than a `reported` one and discount `asserted` outcomes heavily; a dashboard might show only verified results by default. OCP does not fix the weights, only the words, so that every reader can make the call with the same information.

Cost has its own version of this: `cost.basis` says whether token counts were `measured` for that attempt or `allocated` from a coarser total. See [Cost](https://orchestrationcontextprotocol.io/specification/0.3/cost#basis).
