{
  "schema_version": "2026-06-02.data-product-readiness.v1",
  "surface": "main_website",
  "owner": "main_website_release_desk",
  "purpose": "Machine-readable public readiness gate for QUAD public datasets before they are treated as trusted data products.",
  "updated": "2026-06-02",
  "readiness_rule": "A dataset is not ready because it renders. It is ready only when catalog, schema, lineage, freshness, redaction, retention, reconciliation, consumer contract, wording, evidence, and owner review are visible within the dataset's boundary.",
  "must_not_infer": [
    "current_chain_state",
    "current_block_height",
    "current_balance",
    "payload_truth",
    "payload_access",
    "custody_proof",
    "admission_proof",
    "settlement_proof",
    "liquidity_proof",
    "sale_access",
    "reward_eligibility",
    "allocation",
    "production_value_movement",
    "economic_activation",
    "external_validation"
  ],
  "readiness_states": [
    {
      "state_id": "ready_with_boundary",
      "public_label": "ready within boundary",
      "condition": "All required readiness checks are named, current enough for the dataset's use, and owner-reviewed.",
      "quote_as": "This dataset is ready for the named consumer and allowed use only.",
      "downgrade_behavior": "Do not expand the dataset beyond its owner, evidence class, freshness, consumer, and must-not-infer boundary.",
      "must_not_infer": [
        "universal_authority",
        "sibling_chain_acceptance",
        "current_state_beyond_owner",
        "economic_activation"
      ]
    },
    {
      "state_id": "partial_or_reviewing",
      "public_label": "partial or reviewing",
      "condition": "One or more readiness checks exist but are incomplete, stale, local-only, or waiting for owner review.",
      "quote_as": "This dataset is under review or partial; use only for orientation until the missing checks close.",
      "downgrade_behavior": "Route to owner review, missing check, or cannot verify before action.",
      "must_not_infer": [
        "ready_for_action",
        "owner_acceptance",
        "product_availability",
        "economic_activation"
      ]
    },
    {
      "state_id": "not_ready",
      "public_label": "not ready",
      "condition": "Required owner, schema, freshness, lineage, redaction, retention, consumer, or evidence fields are missing.",
      "quote_as": "This dataset is not ready for action or current-state quotation.",
      "downgrade_behavior": "Refuse stronger claims and publish the missing requirement where useful.",
      "must_not_infer": [
        "current_state",
        "route_open",
        "product_availability",
        "economic_activation"
      ]
    },
    {
      "state_id": "retired_or_superseded",
      "public_label": "retired or superseded",
      "condition": "The dataset has been replaced, tombstoned, or made historical by owner route or release receipt.",
      "quote_as": "This dataset is historical only unless a current replacement route is named.",
      "downgrade_behavior": "Use the current replacement route or quote as history only.",
      "must_not_infer": [
        "current_state",
        "continued_access",
        "owner_acceptance",
        "economic_activation"
      ]
    }
  ],
  "readiness_checks": [
    {
      "check_id": "catalog_row_complete",
      "public_label": "catalog row complete",
      "required_public_evidence": [
        "dataset_id",
        "owner_surface",
        "schema_family",
        "evidence_class",
        "freshness_rule",
        "stale_behavior",
        "allowed_use",
        "retention",
        "redaction_rule",
        "consumer_contract",
        "must_not_infer"
      ],
      "pass_condition": "The dataset appears in the public data catalog with owner, evidence, freshness, stale behavior, redaction, retention, consumer contract, and boundary fields.",
      "downgrade_behavior": "If no catalog row exists, treat the dataset as unnamed or local-only.",
      "must_not_infer": [
        "dataset_product_ready",
        "owner_acceptance",
        "current_state",
        "economic_activation"
      ]
    },
    {
      "check_id": "schema_versioned",
      "public_label": "schema versioned",
      "required_public_evidence": [
        "schema_version",
        "required_fields",
        "optional_fields_where_relevant",
        "missing_or_null_behavior",
        "breaking_change_rule_where_relevant"
      ],
      "pass_condition": "The dataset has a visible schema version and enough field rules for readers or tooling to survive changes.",
      "downgrade_behavior": "If schema is not versioned, do not build action flows or quote machine certainty from it.",
      "must_not_infer": [
        "machine_stability",
        "integration_ready",
        "route_open",
        "economic_activation"
      ]
    },
    {
      "check_id": "lineage_named",
      "public_label": "lineage named",
      "required_public_evidence": [
        "source_class",
        "source_owner",
        "source_route",
        "transformation",
        "display_routes",
        "lineage_break_behavior"
      ],
      "pass_condition": "The lineage map names where the data came from, how it is transformed, where it displays, and how claims degrade when lineage breaks.",
      "downgrade_behavior": "If lineage cannot be named, do not quote the value as current or owner-accepted.",
      "must_not_infer": [
        "source_truth",
        "owner_acceptance",
        "current_state",
        "external_validation"
      ]
    },
    {
      "check_id": "freshness_named",
      "public_label": "freshness named",
      "required_public_evidence": [
        "updated_or_height",
        "freshness_label",
        "stale_behavior",
        "cannot_verify_behavior"
      ],
      "pass_condition": "The dataset carries a public freshness signal or a clear fallback/stale/cannot-verify rule.",
      "downgrade_behavior": "If freshness is missing, quote as fallback, stale, unavailable, local-package-only, or cannot verify.",
      "must_not_infer": [
        "current_state",
        "live_route",
        "route_repaired",
        "economic_activation"
      ]
    },
    {
      "check_id": "stale_refusal_tested",
      "public_label": "stale and refusal states tested",
      "required_public_evidence": [
        "stale_state",
        "refused_state",
        "unavailable_state",
        "terminal_state",
        "next_public_check_where_available"
      ],
      "pass_condition": "The dataset can show stale, refused, unavailable, or terminal states without pretending success.",
      "downgrade_behavior": "If stop states cannot be represented, do not use the dataset for action paths.",
      "must_not_infer": [
        "silent_success",
        "hidden_pending_action",
        "route_open",
        "economic_activation"
      ]
    },
    {
      "check_id": "redaction_reviewed",
      "public_label": "redaction reviewed",
      "required_public_evidence": [
        "allowed_public_fields",
        "private_field_classes",
        "redaction_behavior",
        "payload_boundary",
        "sensitive_detail_boundary"
      ],
      "pass_condition": "The redaction boundary names what the dataset may publish and what must remain private.",
      "downgrade_behavior": "If redaction is unclear, keep payloads, private procedure, credentials, and sensitive details out of the public route.",
      "must_not_infer": [
        "payload_truth",
        "provider_identity",
        "private_operator_procedure",
        "custody_proof"
      ]
    },
    {
      "check_id": "retention_named",
      "public_label": "retention named",
      "required_public_evidence": [
        "retention_class",
        "payload_access_state",
        "tombstone_behavior",
        "restore_or_reissue_behavior",
        "terminal_receipt_rule"
      ],
      "pass_condition": "The retention policy names what survives, what can be pruned, how tombstones read, and how restore or reissue is bounded.",
      "downgrade_behavior": "If retention is unclear, do not claim payload access, deletion, restore, reissue, or terminal state.",
      "must_not_infer": [
        "payload_access",
        "payload_truth",
        "continued_access",
        "economic_activation"
      ]
    },
    {
      "check_id": "reconciliation_exists",
      "public_label": "reconciliation exists",
      "required_public_evidence": [
        "conflict_rule",
        "owner_priority",
        "duplicate_behavior",
        "metadata_mismatch_behavior",
        "broken_lineage_behavior"
      ],
      "pass_condition": "The reconciliation rules describe what happens when this dataset conflicts with owner routes, live routes, external references, or older releases.",
      "downgrade_behavior": "If reconciliation is missing, do not resolve conflicts by convenience; use cannot verify.",
      "must_not_infer": [
        "conflict_resolved",
        "owner_acceptance",
        "external_validation",
        "economic_activation"
      ]
    },
    {
      "check_id": "consumer_contract_written",
      "public_label": "consumer contract written",
      "required_public_evidence": [
        "consumer_class",
        "allowed_use",
        "required_checks",
        "forbidden_use",
        "downgrade_behavior",
        "safe_next_action"
      ],
      "pass_condition": "The consumer contract names who may use the dataset, what they may do with it, what they must check, and when they must refuse or downgrade.",
      "downgrade_behavior": "If the consumer is not named, keep the dataset at orientation-only or refuse stronger action.",
      "must_not_infer": [
        "consumer_authority",
        "integration_ready",
        "route_open",
        "economic_activation"
      ]
    },
    {
      "check_id": "public_wording_aligned",
      "public_label": "public wording aligned",
      "required_public_evidence": [
        "page_copy",
        "summary_copy",
        "assistant_guide_copy",
        "must_not_infer_boundary",
        "no unsupported promotional framing"
      ],
      "pass_condition": "Public pages, summary.txt, llms.txt, and related docs use the same owner, freshness, consumer, and boundary language.",
      "downgrade_behavior": "If wording overclaims, remove the claim or route it back to the owner surface before release.",
      "must_not_infer": [
        "sale_access",
        "reward_eligibility",
        "allocation",
        "market_access",
        "economic_activation"
      ]
    },
    {
      "check_id": "current_evidence_artifact_recorded",
      "public_label": "current evidence artifact recorded",
      "required_public_evidence": [
        "release_receipt",
        "manifest_or_hash",
        "source_or_owner_route",
        "strict_check_result",
        "smoke_or_owner_check_where_relevant"
      ],
      "pass_condition": "The current dataset version is tied to a release receipt, manifest/hash, owner route, or current evidence artifact.",
      "downgrade_behavior": "If no current artifact exists, quote as local-only, historical, or cannot verify.",
      "must_not_infer": [
        "host_upload",
        "live_propagation",
        "current_state",
        "external_validation"
      ]
    },
    {
      "check_id": "owner_and_stack_reviewed",
      "public_label": "owner and stack reviewed",
      "required_public_evidence": [
        "owner_surface",
        "stack_role",
        "chain_role_where_relevant",
        "review_state",
        "open_gap_or_done_state"
      ],
      "pass_condition": "The owning surface and stack role agree the dataset is ready for its allowed use or visibly mark the remaining gap.",
      "downgrade_behavior": "If owner or stack review is missing, treat as partial or reviewing.",
      "must_not_infer": [
        "owner_acceptance",
        "stack_acceptance",
        "sibling_authority",
        "economic_activation"
      ]
    }
  ],
  "global_readiness_rules": [
    "A rendered page is not enough; the dataset needs owner, schema, lineage, freshness, redaction, retention, reconciliation, consumer contract, wording, evidence, and review.",
    "A ready dataset is ready only for its named consumer and allowed use.",
    "A missing readiness check should make the public claim weaker, not louder.",
    "The main website can publish readiness guidance; owning chains and product surfaces still prove current state.",
    "Do not use a readiness label to infer custody, admission, settlement, liquidity, sale access, reward eligibility, allocation, or economic activation."
  ]
}
