> ## Documentation Index
> Fetch the complete documentation index at: https://docs.heretic.tech/llms.txt
> Use this file to discover all available pages before exploring further.

# Verdicts and coverage

> Understand the five verdicts, four finding tiers, family status, coverage states, and insufficiency reasons.

Heretic reports what the joined evidence supports. The tenant decides what to do with that report.

## Verdicts

| Verdict          | `conclusive` | Rule                                                                                                                    |
| ---------------- | -----------: | ----------------------------------------------------------------------------------------------------------------------- |
| `contradicted`   |       `true` | A non-refusal `absolute` finding fired, or `composite` findings fired in at least two distinct evidence families.       |
| `refused`        |       `true` | No non-refusal absolute took precedence, and a complete collector submission met an absolute refusal rule.              |
| `disputed`       |      `false` | Exactly one family supplied composite evidence, or a conditional finding fired without a stronger result.               |
| `uncontradicted` |      `false` | Rulable client data joined and no verdict-bearing finding selected another verdict. Weak findings can still be present. |
| `insufficient`   |      `false` | Too little transport or client evidence joined for an assessment.                                                       |

`conclusive` is a categorical result of the ruling algebra. It is not a probability or a prescribed consequence.

A non-refusal absolute finding takes precedence over refusal. Refusal takes precedence over composite and conditional findings.

## Finding tiers

Tiers are categories, not numeric weights.

| Tier          | Effect                                                                                                                |
| ------------- | --------------------------------------------------------------------------------------------------------------------- |
| `absolute`    | Makes the result conclusive by itself. Refusal IDs produce `refused`; other absolute findings produce `contradicted`. |
| `composite`   | Produces `disputed` from one family. Composite findings from at least two distinct families produce `contradicted`.   |
| `conditional` | Can produce `disputed`. It cannot make a result conclusive or corroborate a composite finding.                        |
| `weak`        | Adds context and never changes the verdict.                                                                           |

Several composite findings in one family still count as one family. Several conditional findings do not accumulate into a composite result. Any number of weak findings has no verdict weight.

The finding object carries the tier for that observation. Some IDs have context-dependent branches, so do not infer a fixed tier from the ID alone. The [signal reference](/reference/signals) lists every current tier.

## Family status

Every assessment reports all six families. Each report has a status independent of the top-level verdict.

| Status         | Condition                                                                     |
| -------------- | ----------------------------------------------------------------------------- |
| `contradicted` | At least one absolute, composite, or conditional finding fired in the family. |
| `consistent`   | Coverage is `measured` and no finding above weak fired.                       |
| `not-assessed` | No finding above weak fired and coverage is `unavailable` or `not-yet-ruled`. |

A conditional finding makes its family `contradicted` while the overall verdict can remain `disputed`. A refusal finding makes `http-construction` contradicted while the overall verdict is `refused`.

`highest_tier` considers findings above weak. It is `null` when the family contains only weak findings or no findings.

## Coverage

Coverage says what a family could assess. It does not count as evidence for either side.

### Measured

```json theme={null}
{ "state": "measured" }
```

At least one supported rule in the family had usable input. Other rules in the same family may still have lacked input or abstained.

### Unavailable

```json theme={null}
{
  "state": "unavailable",
  "reason": "human-readable explanation"
}
```

An input needed by the family did not arrive or could not be read.

### Not yet ruled

```json theme={null}
{
  "state": "not-yet-ruled",
  "reason": "human-readable explanation"
}
```

This state covers two cases: relevant input arrived but the current catalogue could not rule on it, or a relevant sensor admission impaired an otherwise measured wire family and no finding fired. It is not agreement with the client.

Coverage reason strings are prose. Use only the `state` enum in program logic.

## Reading `uncontradicted`

`uncontradicted` means no absolute, composite, or conditional finding selected another verdict. It does not mean every family or every rule ran.

An uncontradicted assessment can have all six families measured, or it can have unavailable and not-yet-ruled families. Read each family report before comparing records.

## Insufficient reasons

The full assessment includes `insufficient_reason` only for an insufficient verdict. The tenant API always includes the key and returns `null` for other verdicts.

| Reason            | Meaning                                                                                                     |
| ----------------- | ----------------------------------------------------------------------------------------------------------- |
| `sensor-gap`      | The return grace elapsed without the transport evidence required by the initial assessment gate.            |
| `awaiting-return` | The session is still within the 15-second return grace and required transport or client evidence is absent. |
| `no-return`       | Transport evidence joined, the grace elapsed, and no rulable client payload returned.                       |

A completely unreachable edge cannot create an assessment. The collector instead returns a local failure such as `{ ok: false, reason: 'session open failed' }`.

## Full assessment and tenant projection

The full edge assessment contains:

* `schema` and `provenance`
* verdict fields
* all six family reports, including each report's signal-ID list
* full findings, including optional sensor admissions
* `contradicting_families`
* concealment, identity, and sensor reports
* geometry when it ran

The tenant verdict API returns a smaller projection. It omits the full session, raw claims, raw IP, detailed transports, geometry, the full concealment and sensor reports, per-finding sensor admissions, `contradicting_families`, and each family's internal signal-ID list.

Use stable IDs, enums, booleans, versions, and provenance as program inputs. Do not parse human-readable summaries, headlines, details, network descriptions, or coverage reasons.


## Related topics

- [Signal reference](/reference/signals.md)
- [How Heretic measures](/concepts/how-heretic-measures.md)
- [Quickstart](/quickstart.md)
- [Tenant verdict schema](/api/verdict-schema.md)
- [Tenant verdict endpoint](/api/verdict-endpoint.md)
