# TIMEVOLT portable receipt v2 — fallback authority extension

v2 retains every v1 field, core commitment, Merkle algorithm, OTS representation,
snapshot/correction domain, status rule and offline limitation. The sole wire
extension is `version: 2` with timestamp provider IDs `freetsa` and `sigstore` in
addition to `digicert` and `sectigo`. Up to four distinct tokens may be retained
when an existing batch is re-timestamped after changing pairs. No old token or
signed snapshot is silently rewritten. See the frozen [v1 definition](../v1/RECEIPT_FORMAT.md).

The v1 schema/specification and freeze manifest remain byte-identical. An old v1
reader must reject v2; the updated independent reader accepts both explicitly.
The API evidence-response v1 wrapper remains unchanged and carries the receipt's
own version. Normal main-pair receipts continue to use v1. Fallback-created batches
and batches containing fallback tokens use v2, including after a later switch back.

Configuration `authority_pair: "main"` is the default. Changing it to `"fallback"`
selects **FreeTSA plus Sigstore**, not a single-provider mode. Both are attempted
for each batch, with one valid token sufficient for Dated during a provider outage,
as in v1. Previously validated tokens are retained. OpenTimestamps Alice and Bob
remain mandatory for both configurations. No automatic fallback or Roughtime is added.

All included authority tokens undergo the same full v1 RFC 3161 validation. The
fallback pins additionally restrict the exact signer-to-root certificate chain.
Sigstore's signed generation time must be inside its pinned trust-root authorization
window. No receipt can introduce a root/chain/policy, and no trust update is fetched
while checking a saved receipt.

| Provider | Endpoint | Root DER SHA-256 | Timestamp policy |
|---|---|---|---|
| FreeTSA | `https://freetsa.org/tsr` | `a6379e7cecc05faa3cbf076013d745e327bbbaa38c0b9af22469d4701d18aabc` | `1.2.3.4.1` |
| Sigstore | `https://timestamp.sigstore.dev/api/v1/timestamp` | `2aca8fea5d3ce48b01cc77076293c280e6c23ffe44034757ee7833ca9f45d633` | `1.3.6.1.4.1.57264.2` |

The chains and provenance are in `staging/trust/pins.json` and its README. FreeTSA
requests are spaced at least one second after the previous completion; Sigstore
at least ten seconds (0.1 request/s). Sectigo remains at least fifteen seconds.
Shared durable local gates serialize concurrent workers and apply exponential
error backoff, capped at fifteen minutes. Multi-host production requires a shared
scheduler; these local locks are staging infrastructure.

Only synthetic staging issuance is enabled. Revocation/preservation, production
operations and public publication retain their existing gates. The format's
`FORMAT_MANIFEST.json` pins these wire definitions; it does not certify a launch.
