{
 "$id": "https://cumulativewebinc.github.io/cwi-placement-wall/placements.schema.json",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "description": "One placement of one That Boy Hi Hat track on one curator playlist. Every record is a scan snapshot \u2014 truth label plus verified_at, never a claim without a scan.",
 "properties": {
  "artist": {
   "type": "string"
  },
  "artist_spotify_id": {
   "type": "string"
  },
  "as_of": {
   "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
   "type": "string"
  },
  "honest_limits": {
   "items": {
    "type": "string"
   },
   "minItems": 1,
   "type": "array"
  },
  "kill_rule": {
   "type": "string"
  },
  "placements": {
   "items": {
    "properties": {
     "curator": {
      "type": "string"
     },
     "followers_snapshot_date": {
      "type": [
       "string",
       "null"
      ]
     },
     "id": {
      "pattern": "^pl_[A-Z0-9]+$",
      "type": "string"
     },
     "note": {
      "type": "string"
     },
     "of_total": {
      "minimum": 1,
      "type": "integer"
     },
     "playlist_followers_snapshot": {
      "minimum": 0,
      "type": [
       "integer",
       "null"
      ]
     },
     "playlist_name": {
      "type": "string"
     },
     "playlist_size_snapshot": {
      "minimum": 1,
      "type": [
       "integer",
       "null"
      ]
     },
     "playlist_spotify_id": {
      "pattern": "^[A-Za-z0-9]{22}$",
      "type": "string"
     },
     "position": {
      "minimum": 1,
      "type": "integer"
     },
     "proof_url": {
      "pattern": "^https://open\\.spotify\\.com/playlist/",
      "type": "string"
     },
     "track": {
      "type": "string"
     },
     "track_spotify_id": {
      "pattern": "^[A-Za-z0-9]{22}$",
      "type": "string"
     },
     "verification": {
      "enum": [
       "VERIFIED",
       "UNVERIFIED",
       "STALE"
      ]
     },
     "verified_at": {
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[-+]\\d{2}:\\d{2}$",
      "type": "string"
     },
     "artwork": {
      "type": "string",
      "pattern": "^assets/covers/[a-z0-9-]+\\.(jpg|jpeg|png|webp)$",
      "description": "Official cover art for the track \u2014 verified track mapping only. Relative path under docs/."
     }
    },
    "required": [
     "id",
     "playlist_name",
     "curator",
     "playlist_spotify_id",
     "track",
     "track_spotify_id",
     "position",
     "of_total",
     "verified_at",
     "verification",
     "proof_url"
    ],
    "type": "object"
   },
   "minItems": 1,
   "type": "array"
  },
  "schema": {
   "const": "cwi.placement-record/1.0"
  },
  "verification_method": {
   "type": "string"
  }
 },
 "required": [
  "schema",
  "artist",
  "as_of",
  "verification_method",
  "honest_limits",
  "kill_rule",
  "placements"
 ],
 "title": "cwi.placement-record/1.0",
 "type": "object"
}