{
  "region": "SG",
  "generated": "2026-10-03 05:05",
  "indicator": {
    "id": "ai_readers_01_sg",
    "name": "AI readers (weekly) - AI requests to the Singapore edition (/sg/ paths)",
    "unit": "requests",
    "cadence": "weekly (re-aggregated daily from daily data; weeks are 7-day blocks from 2026-08-23, Sunday to Saturday, JST)",
    "definition_version": "1.0",
    "definition_fixed_on": "2026-08-29",
    "definition_doc": "docs/指標定義_AI読者数.md",
    "data_layer_doc": "docs/指標定義_AI読者アクセス.md",
    "path_scope": "/sg/",
    "path_scope_note": "Only requests whose path starts with /sg/ (this edition's pages and API files). Shared root files (/, /llms.txt, /index.json, /api/world.json) are not attributed to any edition. Same definition, same UA table and same self-exclusion rule as the Japan edition; only the path filter differs.",
    "observation_start": "2026-10-03",
    "edition_launched": "2026-10-03",
    "verified_series_start": "2026-08-27",
    "published_series": "Headline = requests Cloudflare verified as known bots (verifiedBotCategory). Unverified counts listed separately; the self-declared total is a reference upper bound only.",
    "counted": "HTTP requests from AI-declared user agents to ai-lifeline.org under this path prefix (Cloudflare edge measurement; our own traffic excluded by UA)",
    "not_means_1": "Not proof that an AI read the page. UA strings are self-declared and can be spoofed; verification is Cloudflare judgement, not ours. Unverified does not mean spoofed.",
    "not_means_2": "Not readers, people or sessions: one request = one file.",
    "not_means_3": "Says nothing about training use.",
    "privacy": "No IP addresses are collected or stored; raw UA strings are not published, only AI-name classes.",
    "self_exclusion": "Our own traffic is identified by UA and excluded; the excluded counts are published (self_excluded).",
    "sampling_note": "Counts are Cloudflare sample counts (as in the Japan edition); no sampling correction is applied.",
    "provisional_note": "Weeks that have not ended are provisional. Series started with the edition launch, so early weeks are partial."
  },
  "source": {
    "name": "Cloudflare GraphQL Analytics API (httpRequestsAdaptiveGroups, edge measurement)",
    "fetch": "ai-lifeline/scripts/fetch_cf_access.ps1 (daily, previous day)",
    "build": "ai-lifeline/scripts/build_ai_readers_region.ps1",
    "raw_note": "Daily detail is archived every day from the API (8-day retention) into data/cfaccess/raw/"
  },
  "weeks": [],
  "days": []
}
