{
  "schema_version": "2026-06-02.freshness-policy.v1",
  "surface": "main_website",
  "owner": "main_website_release_desk",
  "purpose": "Machine-readable public freshness and stale-state policy for QUAD main-domain data, fallback values, release artifacts, owner routes, and outside references.",
  "updated": "2026-06-02",
  "freshness_rule": "Freshness is a claim boundary, not a trust shortcut. A fresh value still needs the correct owner; a stale value must downgrade before readers or tooling act on it.",
  "must_not_infer": [
    "current_chain_state",
    "current_block_height",
    "current_balance",
    "custody_proof",
    "admission_proof",
    "settlement_proof",
    "liquidity_proof",
    "sale_access",
    "reward_eligibility",
    "allocation",
    "production_value_movement",
    "economic_activation",
    "external_validation"
  ],
  "freshness_classes": [
    {
      "class_id": "owner_current",
      "condition": "The owning surface publishes the value with a current timestamp, height, version, or status label and the route is readable.",
      "quote_as": "owner-published current state within the route boundary",
      "public_label": "current",
      "machine_label": "current",
      "consumer_behavior": "Quote owner, route, freshness signal, proof class, and boundary together.",
      "downgrade_behavior": "If owner, route, freshness, or boundary is missing, move to stale, fallback, conflicted, or cannot_verify.",
      "must_not_infer": [
        "scope_beyond_owner_route",
        "custody",
        "settlement",
        "liquidity",
        "economic_activation"
      ]
    },
    {
      "class_id": "static_fallback",
      "condition": "A main-domain static value, baseline label, or fallback JSON exists without a readable owner-current route.",
      "quote_as": "static fallback or orientation data",
      "public_label": "fallback",
      "machine_label": "fallback",
      "consumer_behavior": "Use for page meaning, route discovery, and degraded-state display only.",
      "downgrade_behavior": "Do not use for live height, balance, transaction count, liquidity, route availability, or market state.",
      "must_not_infer": [
        "live_height",
        "live_transactions",
        "current_balance",
        "market_activity",
        "route_open"
      ]
    },
    {
      "class_id": "cached_snapshot",
      "condition": "A copied value is available with a snapshot timestamp, release hash, old export, or cached label.",
      "quote_as": "cached snapshot",
      "public_label": "cached",
      "machine_label": "cached",
      "consumer_behavior": "Quote the snapshot age and source route before using it for historical context.",
      "downgrade_behavior": "If age or source is missing, move to stale or cannot_verify.",
      "must_not_infer": [
        "current_state",
        "route_repaired",
        "balance_truth",
        "settlement_truth",
        "launch_status"
      ]
    },
    {
      "class_id": "stale",
      "condition": "The route is readable but its timestamp, height, release receipt, or owner label is older than the published freshness rule or contradicted by a fresher owner route.",
      "quote_as": "stale data",
      "public_label": "stale",
      "machine_label": "stale",
      "consumer_behavior": "Use only as historical context unless the owner route publishes a current replacement.",
      "downgrade_behavior": "Current-state claims must become stale, historical, superseded, or cannot_verify.",
      "must_not_infer": [
        "current_state",
        "current_height",
        "current_balance",
        "route_open",
        "economic_activation"
      ]
    },
    {
      "class_id": "unavailable",
      "condition": "The expected public route is missing, unreachable, blocked, or returning an unsupported shape.",
      "quote_as": "unavailable or cannot verify",
      "public_label": "cannot verify",
      "machine_label": "cannot_verify",
      "consumer_behavior": "Say the current state cannot be verified from the public route and link the attempted route.",
      "downgrade_behavior": "Do not fill the gap with inferred height, balance, route state, settlement, or launch claims.",
      "must_not_infer": [
        "invented_height",
        "invented_balance",
        "route_success",
        "settlement_success",
        "launch_status"
      ]
    },
    {
      "class_id": "conflicted",
      "condition": "Two public sources disagree on owner, timestamp, height, state label, denom, metadata, release hash, or proof class.",
      "quote_as": "conflicted until owner route resolves it",
      "public_label": "conflicted",
      "machine_label": "conflicted",
      "consumer_behavior": "Use reconciliation rules and the owner route. Preserve the weaker public claim until the owner publishes a terminal state.",
      "downgrade_behavior": "Do not pick the stronger-looking claim because it is newer, louder, indexed, or easier to read.",
      "must_not_infer": [
        "owner_acceptance",
        "external_validation",
        "wallet_safety",
        "mainnet_status_from_reference",
        "economic_activation"
      ]
    },
    {
      "class_id": "local_package_only",
      "condition": "A source file, package, manifest, or receipt exists locally but the live public route has not been verified to match it.",
      "quote_as": "local package evidence",
      "public_label": "local package only",
      "machine_label": "local_package_only",
      "consumer_behavior": "Use for release review and upload handoff only. Separate source, package, and deployed state.",
      "downgrade_behavior": "Do not claim the live domain, subdomain, indexer, wallet, or outside reference has accepted the change.",
      "must_not_infer": [
        "host_upload_completed",
        "dns_propagation_completed",
        "live_route_updated",
        "indexer_acceptance",
        "external_validation"
      ]
    },
    {
      "class_id": "superseded",
      "condition": "A newer owner route, release receipt, schema version, or public policy replaces the value.",
      "quote_as": "superseded historical evidence",
      "public_label": "superseded",
      "machine_label": "superseded",
      "consumer_behavior": "Keep for history and audit reading only.",
      "downgrade_behavior": "Do not use for current route, current policy, current schema, current height, current balance, or current readiness.",
      "must_not_infer": [
        "current_policy",
        "current_schema",
        "current_readiness",
        "current_chain_state",
        "economic_activation"
      ]
    }
  ],
  "consumer_rules": [
    "Freshness never outranks owner authority.",
    "Every current-state quote needs owner, route, freshness signal, proof class, and boundary.",
    "Static fallback data keeps pages legible but cannot become live chain state.",
    "When freshness is missing, downgrade before quoting.",
    "When a route is unavailable, say cannot verify instead of inventing values.",
    "When local package evidence differs from the live domain, keep package state and deployed state separate.",
    "When sources conflict, use reconciliation rules and preserve the weaker public claim until the owner route resolves it."
  ]
}
