{
  "views_human": 170,
  "views_bot": 325,
  "downloads_human": 50,
  "downloads_bot": 65,
  "human": {
    "views": 170,
    "downloads": 50
  },
  "bot": {
    "views": 325,
    "downloads": 65
  },
  "classification": {
    "method": "ua_denylist + healthcheck_ua",
    "bot_score_threshold": 30,
    "note": "views = views_human + views_bot; same for downloads. Verified bots and score<=threshold → bot. Health-check UAs → bot (counted, not skipped). Legacy: pre-split totals remain in views/downloads; human/bot keys start at 0 until new classified traffic (do NOT reset existing counters; do NOT invent scores). Display strategy (b): views_bot = views - views_human and downloads_bot = downloads - downloads_human so the invariant holds without rewriting KV history. Pre-split remainder is shown as bot until proven human. Never inflate. Never sample.",
    "legacy": "display remainder: views_bot = views - views_human; downloads_bot = downloads - downloads_human. Pre-split totals shown as bot until proven. KV history not rewritten."
  },
  "project": "miragegrid",
  "total": 115,
  "views": 495,
  "downloads": 115,
  "by_repo": {
    "AzielEliab/miragegrid": 114,
    "evil/x": 1
  },
  "by_branch": {
    "main": 115
  },
  "by_fork": {
    "0": 114,
    "1": 1
  },
  "breakdown": [
    {
      "project": "miragegrid",
      "owner": "AzielEliab",
      "repo": "miragegrid",
      "branch": "main",
      "fork": "0",
      "count": 114
    },
    {
      "project": "miragegrid",
      "owner": "evil",
      "repo": "x",
      "branch": "main",
      "fork": "1",
      "count": 1
    }
  ],
  "github": {
    "stars": 0,
    "forks": 0,
    "watchers": 0,
    "release_download_count": 0
  },
  "note": "Forks identified by GitHub owner/repo. Key layout: project|owner|repo|branch|fork. Views are separate from downloads. /v1 does not increment."
}