{
  "schemaVersion": "mirage-public-case-v0",
  "title": "Mirage public Reality case schema",
  "requiredTopLevelFields": ["schemaVersion", "id", "kind", "title", "observedAt", "updatedAt", "status", "question", "claims", "sources", "decision", "strongestCounterClaimId", "reopenConditions", "freshness", "supersedes", "supersededBy", "provenance", "currentRevision", "revisions"],
  "claimFields": {"required": ["claimId", "epistemicClass", "supportClass", "text", "sourceRefs", "derivedFromClaimIds", "observedAt"], "epistemicClass": ["OBSERVATION", "INTERPRETATION", "COUNTER", "OUTCOME", "UNKNOWN"], "supportClass": ["DIRECT_SOURCE", "MULTI_SOURCE_INFERENCE", "WORKING_INTERPRETATION", "UNSUPPORTED_UNKNOWN"]},
  "sourceFields": {"required": ["sourceId", "sourceObservationId", "url", "normalizedPublicUrl", "publisher", "role", "retrievedAt", "verification"], "optional": ["publishedAt", "updatedAt", "version", "sourceState", "sourceObservationNote"], "verification": {"required": ["checkedAt", "result", "note"], "results": ["RECONSTRUCTABLE_FROM_CURRENT_SOURCE", "SOURCE_CHANGED_REVIEW_REQUIRED", "SOURCE_UNAVAILABLE", "NOT_RECHECKED"]}},
  "statuses": ["RUN", "OUTCOME_PENDING", "PARKED_RELATIVE_PRIORITY", "HOLD_EXTERNAL_PROXY", "DROP", "CLOSED", "STALE", "SUPERSEDED", "RETRACTED"],
  "changeEventTypes": ["CASE_CREATED", "CLAIMS_CHANGED", "COUNTER_CHANGED", "DECISION_CHANGED", "OUTCOME_ADDED", "SOURCE_STATE_CHANGED", "PROVENANCE_VERIFIED", "FRESHNESS_CHANGED", "SUPERSEDED", "STALE", "RETRACTED"],
  "sourceObservationSemantics": "Public URLs are mutable. sourceObservationId plus retrievedAt, any source-reported version/date, and verification identify the observation event Mirage used; URL equality does not establish source-state equality. This ledger does not claim archived source bytes or cryptographic preservation.",
  "note": "Decision/status are distinct from claim truth. This schema does not encode numerical confidence."
}
