{
  "id": "agent-analytics",
  "title": "AIIdiots traffic and agent signal contract",
  "lastReviewed": "2026-06-14",
  "purpose": "Answer whether AIIdiots is getting traffic, where it comes from, and which agent artifacts get used without collecting identity payloads.",
  "humanTrafficLayer": {
    "provider": "Vercel Web Analytics",
    "answers": [
      "visitors",
      "page views",
      "top pages",
      "referrers",
      "country",
      "operating system",
      "browser",
      "custom events"
    ],
    "source": "Vercel project analytics dashboard"
  },
  "agentSignalLayer": {
    "endpoint": "/api/agent-signal",
    "methods": ["GET", "POST"],
    "answers": [
      "which machine artifacts are opened",
      "which source lane or intent bucket was selected",
      "whether the opener looked like a browser, crawler, CLI, or known AI agent class",
      "referrer origin when available",
      "agent discovery score and matched doctrine-path signals"
    ],
    "storage": "Vercel function logs for browserless agent signals; browser-executed visits also send Vercel Web Analytics custom events"
  },
  "aiBotFirewallLayer": {
    "provider": "Vercel AI Bots managed ruleset",
    "mode": "Log",
    "enabledAt": "2026-06-14T15:24:33Z",
    "posture": "observe only; do not deny or challenge desired AI crawlers"
  },
  "agentDiscoveryScore": {
    "contract": "/agent-discovery-score.json",
    "maxScore": 100,
    "labels": ["none", "faint", "partial", "strong", "doctrine-path"],
    "purpose": "Score whether an agent found the AIIdiots doctrine path: compact map, context, route manifest, lessons, field notes, and answer-engine referrals.",
    "conflictsWithProfound": false
  },
  "vercelCustomEventProperties": {
    "limit": 2,
    "pageViews": ["route", "surface"],
    "targetedEvents": ["route", "target"],
    "note": "Richer sanitized fields remain in /api/agent-signal function logs; browser-side Vercel custom events stay compatible with included Web Analytics."
  },
  "allowedPayloadFields": [
    "name",
    "route",
    "surface",
    "target",
    "referrerOrigin",
    "userAgentClass",
    "agentDiscoveryScore",
    "agentDiscoverySignals",
    "agentDiscoveryLabel"
  ],
  "disallowedPayloadFields": [
    "cookie",
    "email",
    "fingerprint",
    "ip",
    "prompt",
    "rawReferrer",
    "transcript",
    "userAgent"
  ],
  "agentClasses": [
    "openai",
    "anthropic",
    "perplexity",
    "search-crawler",
    "cli-or-agent",
    "crawler",
    "browser",
    "unknown"
  ],
  "phase1Verification": {
    "status": "code contract verified; Vercel Web Analytics enabled by operator on 2026-06-14",
    "verifiedAgentSignal": {
      "method": "GET",
      "path": "/api/agent-signal?name=llms_txt_open&route=/llms.txt&surface=for_agents&target=/llms.txt",
      "result": "ok",
      "userAgentClass": "cli-or-agent"
    },
    "humanPageviewNumber": "pending: requires fresh post-enable visits before charts are meaningful",
    "agentFetchNumber": "1 synthetic production agent-signal smoke"
  },
  "nextUpgrade": "If route-level agent traffic matters beyond function-log retention, connect Profound Agent Analytics or add Vercel Log Drain into a small store that feeds /agent-discovery-score.json."
}
