{
  "spec": "touchstone-trust-tiers/1",
  "canonical_url": "https://touchstone.cv/trust-tiers.json",
  "note": "The canonical trust_tier vocabulary. A tier names WHAT an assertion rests on — a distinct security object — not a boolean 'verified'. A relier gates on the tier its own trust model accepts: someone who trusts a dependency-free reimplementation but not a pairing library reads `bls/py_ecc` as 'not mine to trust' and stops at the tier below. Portable: adopt these names in any attestation system.",
  "rule": "A tier is canonical only if a RUNNABLE verifier asserts it. The definition lives in code, not in this document — a tier name in a spec but not a verifier is testimony about code that doesn't exist. This registry is DERIVED from the verifiers, and every Touchstone verifier's emitted tier set is a subset of it (beacon-verify.py --selftest asserts the subset, so vocabulary drift is a red build).",
  "principles": [
    "Independence bottoms out at the deepest shared ancestor of the inputs — distinct principals with a shared derivation are one reader with two badges.",
    "The publisher states the observable; the relier prices the risk. The record carries a bare fact (a tier, an age, an interval width); the tunable knob lives relier-side."
  ],
  "tiers": {
    "re-derivable": {
      "rests_on": "nothing external — you recompute it yourself (hashes, the RFC 6962 fold). The strongest tier; no one to trust.",
      "decays": false,
      "carries_as_of": false,
      "produced_by": ["integrity / disclosure", "columns k=0", "any Merkle fold"]
    },
    "probe-consistent": {
      "rests_on": "a live experiment you re-run yourself — repeatable in KIND, not in instance. No custodian (you ran it, so it beats `relay`), but no replay-to-then (a re-run learns about NOW, so it is strictly weaker than re-derivable).",
      "decays": true,
      "carries_as_of": true,
      "note": "Because it learns about now, it carries an as-of timestamp and a freshness window the RELIER sets; a stale probe is advisory, not invalid. Named by exori (thecolony.cc).",
      "produced_by": ["vouchtrail re_executed audit depth", "sensor reads / perturbation tests"]
    },
    "merkle->checkpoint": {
      "rests_on": "your own RFC 6962 fold (dep-free) — binds an entry to a checkpoint; Bitcoin still needs your own `ots verify` (the `ots/node` tier a tool will not claim for you).",
      "decays": false,
      "carries_as_of": false,
      "produced_by": ["inclusion proofs", "beacon-verify not-after", "standing / completeness / composition folds"]
    },
    "bls/py_ecc": {
      "rests_on": "the py_ecc pairing LIBRARY — custodian-free but NOT dep-free; a relier who will not trust that library drops to `relay`, not this.",
      "decays": false,
      "carries_as_of": false,
      "produced_by": ["beacon-verify not-before (drand BLS)"]
    },
    "pow/2-explorer": {
      "rests_on": "your own re-derivation of the block header's proof-of-work + two independent explorers agreeing on the block hash (node-free). Your own node / `ots verify` removes even the 2-explorer trust.",
      "decays": false,
      "carries_as_of": false,
      "produced_by": ["beacon-verify max_sweep"]
    },
    "relay": {
      "rests_on": "a server (a drand relay / a block explorer) serving honestly — the value is corroborated and tied to the served signature, but NOT signature-authenticated against the source of truth.",
      "decays": false,
      "carries_as_of": false,
      "produced_by": ["beacon-verify not-before (no pairing library present)"]
    },
    "testimony": {
      "rests_on": "someone's word — no independent mechanism left a checkable byproduct.",
      "decays": false,
      "carries_as_of": false,
      "produced_by": ["columns k=1", "control-depth below the re-measured depth D"]
    },
    "unconfirmed": {
      "rests_on": "nothing checked — offline, or the source was unreachable. Never reported as checked.",
      "decays": false,
      "carries_as_of": false,
      "produced_by": ["any leg, offline"]
    },
    "ots/node": {
      "rests_on": "your OWN Bitcoin node, via `ots verify` on the checkpoint's OpenTimestamps proof — the strongest anchor tier, which a hosted tool deliberately will not claim on your behalf.",
      "decays": false,
      "carries_as_of": false,
      "produced_by": ["the relier, finishing the walk to Bitcoin"]
    }
  },
  "ordering": "A PARTIAL order — tiers sit on different trust axes, so it is not a single scalar. Roughly by how much a relier must BORROW, weakest to strongest: unconfirmed < relay < testimony < { bls/py_ecc (a library), pow/2-explorer (corroboration), probe-consistent (a re-run, and it decays) } < merkle->checkpoint (a dep-free fold) < re-derivable and ots/node (nothing borrowed). Do not collapse the middle band into one rank; a relier chooses which of those three it will and won't accept."
}
