Skip to main content
Heretic verdicts are binary rulings with attached evidence — not risk scores. Every session produces exactly one verdict, drawn from a fixed vocabulary of five values. Each verdict arrives alongside the evidence that produced it, so your application can make a transparent, auditable enforcement decision rather than guessing at an opaque probability. The conclusive boolean tells you whether the ruling meets the bar for hard enforcement.

The Five Verdicts

contradicted

One or more evidence families directly contradict the client’s declared claims. The conclusive flag is true when at least one absolute signal is present, or when two or more composite signals from different families corroborate each other. Act on this verdict.

refused

The client refused to complete one or more required measurements. Refusal is itself a strong signal — a benign browser has no reason to block a timing probe or suppress a TCP handshake. Treat refused sessions with the same suspicion as disputed.

disputed

Evidence points toward contradiction, but the signal weight does not yet meet the conclusive threshold. You have enough to challenge or rate-limit, but not enough to block outright.

uncontradicted

All measured families align with the client’s declared claims. No contradiction was detected across the signals Heretic was able to collect.

insufficient

Too few evidence families reported results to reach any verdict. This usually means the collector script ran on a severely restricted connection or was blocked before completing initialization.
uncontradicted is not a guarantee of legitimacy. It means Heretic found no contradiction among the signals it measured. A session in a geography with weak RTT coverage, or one where the collector could not run certain probes, may return uncontradicted without meaning the client is clean. Check measured_families in the response to understand what was actually tested.

The conclusive Boolean

The conclusive field is the single most important field in the verdict payload for enforcement purposes. It is true only when the ruling meets the threshold defined by the ruling algebra:
  • At least one absolute signal fired, or
  • Two or more composite signals from different evidence families corroborate each other
When conclusive is true, Heretic has ruled out every plausible benign explanation for the contradiction. You can gate hard on this:
When conclusive is false — which includes all disputed and refused verdicts — the evidence is meaningful but not definitive. Use it to trigger soft responses: a CAPTCHA challenge, elevated rate-limiting, or flagging the session for manual review.
A practical policy split: verdict === "contradicted" && conclusive === true → block or reject. verdict === "disputed" || (verdict === "contradicted" && !conclusive) → challenge. verdict === "uncontradicted" → pass through. verdict === "insufficient" → optionally re-request the session or fail open depending on your risk tolerance.

Hard vs. Soft Gates

The contradicting_families Field

When the verdict is contradicted or disputed, the response includes a contradicting_families array listing every evidence family that contributed a contradicting signal:
Use contradicting_families to:
  • Log specific evidence in your audit trail rather than just a verdict string
  • Customize user-facing messaging — a network-geometry contradiction implies a VPN or proxy, which may warrant a different prompt than a transport-stack OS contradiction
  • Route to the right review queue — a compute contradiction may matter more in a transaction-fraud context than a render contradiction
Read the full breakdown of what each family measures in Evidence Families.