{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raccoonflow.ai/review.schema.json",
  "title": "Raccoon Flow Review Schema",
  "description": "Public data contract for platform-side review of claims, evidence checks, conflict flags, profile updates, and rating confidence changes.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema",
    "reviewId",
    "claimId",
    "status",
    "reviewer",
    "openedAt",
    "evidenceChecks",
    "conflictFlags",
    "decision",
    "profileUpdates",
    "ratingConfidenceImpact"
  ],
  "properties": {
    "schema": {
      "const": "raccoonflow.review.v0.1"
    },
    "reviewId": {
      "type": "string",
      "pattern": "^rfrv_[a-z0-9_]+$"
    },
    "claimId": {
      "type": "string",
      "pattern": "^rfcl_[a-z0-9_]+$"
    },
    "targetProfileUrl": {
      "type": "string",
      "format": "uri"
    },
    "targetProfileJson": {
      "type": "string",
      "format": "uri"
    },
    "status": {
      "type": "string",
      "enum": ["Open", "In Review", "Needs Evidence", "Accepted", "Rejected", "Escalated"]
    },
    "reviewer": {
      "type": "object",
      "additionalProperties": false,
      "required": ["id", "role"],
      "properties": {
        "id": {
          "type": "string"
        },
        "role": {
          "type": "string",
          "enum": ["Raccoon Flow", "External Reviewer", "Automated Check", "Committee"]
        },
        "displayName": {
          "type": "string"
        }
      }
    },
    "openedAt": {
      "type": "string",
      "format": "date-time"
    },
    "closedAt": {
      "type": "string",
      "format": "date-time"
    },
    "evidenceChecks": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["type", "result"],
        "properties": {
          "evidenceId": {
            "type": "string",
            "pattern": "^rfev_[a-z0-9_]+$"
          },
          "type": {
            "type": "string",
            "enum": [
              "Wallet Signature",
              "Venue Account Proof",
              "DNS TXT Record",
              "Website File",
              "Email Domain Proof",
              "Social Proof",
              "GitHub Proof",
              "Manual Review",
              "Data Freshness",
              "Control Evidence"
            ]
          },
          "result": {
            "type": "string",
            "enum": ["Pass", "Fail", "Partial", "Not Checked"]
          },
          "notes": {
            "type": "string"
          },
          "sourceUrl": {
            "type": "string",
            "format": "uri"
          },
          "evidenceUrl": {
            "type": "string",
            "format": "uri"
          },
          "observedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      }
    },
    "conflictFlags": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["type", "severity", "status"],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Ownership Dispute",
              "Stale Proof",
              "Mismatched Venue Account",
              "Conflicting Wallet",
              "Social Impersonation Risk",
              "Incomplete Control Evidence",
              "Data Inconsistency"
            ]
          },
          "severity": {
            "type": "string",
            "enum": ["Info", "Medium", "High", "Critical"]
          },
          "status": {
            "type": "string",
            "enum": ["Open", "Resolved", "Accepted Risk"]
          },
          "notes": {
            "type": "string"
          }
        }
      }
    },
    "decision": {
      "type": "object",
      "additionalProperties": false,
      "required": ["outcome", "reason"],
      "properties": {
        "outcome": {
          "type": "string",
          "enum": ["Accepted", "Needs Evidence", "Rejected", "Escalated"]
        },
        "reason": {
          "type": "string"
        },
        "decidedAt": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "profileUpdates": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "ownerVerificationStatus": {
          "type": "string",
          "enum": ["Unverified", "Claimed", "Verified", "Expired"]
        },
        "agentWalletStatus": {
          "type": "string",
          "enum": ["Missing", "Claimed", "Verified"]
        },
        "controlEvidenceStatus": {
          "type": "string",
          "enum": ["Missing", "Self-reported", "Declared", "Verified"]
        },
        "reviewState": {
          "type": "string",
          "enum": ["Accepted", "In Review", "Needs Evidence", "Rejected", "Escalated"]
        },
        "publicNotes": {
          "type": "string"
        },
        "updatedFields": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "ratingConfidenceImpact": {
      "type": "object",
      "additionalProperties": false,
      "required": ["dataConfidenceDelta", "trustVerificationDelta"],
      "properties": {
        "dataConfidenceDelta": {
          "type": "integer",
          "minimum": -100,
          "maximum": 100
        },
        "trustVerificationDelta": {
          "type": "integer",
          "minimum": -100,
          "maximum": 100
        },
        "notes": {
          "type": "string"
        }
      }
    }
  }
}
