{
  "ok": true,
  "contract": "offdiagonal-shared-evidence-contract/1.0.0",
  "ownership": {
    "notflat.world": "export original forecasts, model identities, outcomes, context and lifecycle evidence with trustworthy clocks",
    "offdiagonal.space": "preserve originals, reconcile identities, deduplicate mirrors, build reproducible derived views, freeze downloadable packages",
    "zenodivergent.dev": "define experiments, decision times, label policies, splits, normalisation, model inputs and evaluation"
  },
  "policy": {
    "residual": "residual/first-print-v1",
    "residualSign": "forecast_minus_outcome",
    "selection": "candidates/decision-boundary-v1",
    "relationship": "relationships/asof-v1",
    "probabilityConversion": "probability/percent-to-mass-v1",
    "identity": "identity/namespaced-v1",
    "outcomeIdentity": "outcome-identity/canonical-v1"
  },
  "clockBasis": {
    "measured_receipt": "our own first-seen write; evidence about us, not about the provider",
    "documented_publication": "an archived provider publication timestamp",
    "conservative_bound": "a stated bound, used as the upper bound for causal admission",
    "unknown": "not recorded; left unknown rather than substituted from another clock"
  },
  "rules": [
    "raw evidence is preserved and the normalised interpretation is attached beside it, never in its place",
    "a mirror carries the same identity as its original; it adds custody, never another independent forecaster or observation",
    "unknown stays null with a reason; zero is an observed numeric value",
    "corrections append a new version with a supersedes link; frozen bytes never change",
    "native units and target definitions are preserved; incompatible supplies are never pooled into one candidate set",
    "permission facts are carried separately from scientific readiness; a free API is not a permission"
  ],
  "records": {
    "url": "https://offdiagonal.space/api/public/v1/handoff/contract/records?type=<type>&supply=market&source_key=ecb_spf&limit=200",
    "types": [
      "models",
      "targets",
      "forecasts",
      "outcome_vintages",
      "context",
      "lifecycle"
    ],
    "supplies": [
      "market",
      "own"
    ],
    "cursor": "pass cursor=<nextCursor> to continue; paging is keyset, never offset"
  },
  "derived": {
    "resolvedErrors": "https://offdiagonal.space/api/public/v1/handoff/contract/errors?source_key=ecb_spf&limit=200",
    "comparisonSets": "https://offdiagonal.space/api/public/v1/handoff/contract/comparison-sets?source_key=ecb_spf&limit=200",
    "relationships": "https://offdiagonal.space/api/public/v1/handoff/contract/relationships?limit=200"
  },
  "support": "https://offdiagonal.space/api/public/v1/handoff/contract/inventory?source_key=ecb_spf",
  "acceptanceTests": "https://offdiagonal.space/api/public/v1/handoff/contract/acceptance?source_key=ecb_spf",
  "referencePackage": {
    "url": "https://offdiagonal.space/api/public/v1/market/reference",
    "scope": "bundle:download",
    "note": "small immutable hand-checkable package: frozen identity, checksums, counts and exclusions. Downloading it is not consumption; return a parse receipt."
  },
  "firstSupply": {
    "sourceKey": "ecb_spf",
    "why": "respondent-level answers, real revisions, several outcome vintages and the same annual target repeated across rounds — every hard case in one supply",
    "others": "weather, Hubverse, crypto replay and prediction-market summaries pass through the same contract once this one clears its acceptance tests"
  }
}