The reconciliation layer in one call. Where `cross_lens_verify` answers
"what is this network destination," `verdict_lookup` answers a different,
sharper question about a key-addressed ACTOR: **does what this key claims
about itself match what the network has seen it do?**
It fuses two sides:
- **claim** — what the key can prove about itself: its `attestation_tier`
across roots of trust (bare Ed25519 self-attestation → a RATS/EAT
hardware/platform attestation). TunnelMind owns no silicon and reads
every root; the tier is always *measured/anchored*, never self-asserted
(a token claiming a higher tier than its trust anchor is trusted to
assert is capped down).
- **conduct** — what the graph has seen the key's subject do (Scry × Sigil
× GhostRoute), supplied via the optional `subject` parameter.
The response carries `reconciliation.contradictions` (e.g. a key that
attests `silicon-root` but behaves as a low-trust node →
`claim_exceeds_conduct`; a presented claim that fails to verify →
`unverified_claim`; claims presented with no proof of key control →
`key_control_unproven`), a `claim_vs_conduct_delta`, and a
`verdict {tier, reputation, flags, confidence}`.
Keys are linked to an identity ONLY when the actor cryptographically
proves control — never inferred from behavioral correlation. An EAT that
attests a *different* subject key is rejected, not silently merged.
The verdict is published as a self-verifying receipt: given the receipt
bytes + the witness public keys carried inline, anyone re-derives the
verdict and checks log inclusion OFFLINE with `scripts/verify-verdict.mjs`
— no call back to TunnelMind. A bare, unattested key still gets a verdict
(at `self-asserted` tier); attestation is never required to participate.