{
  "status": "ok",
  "generated_at": "2026-08-02T10:05:24Z",
  "generation_started_at": "2026-08-02T10:05:24Z",
  "generation_duration_ms": 4698,
  "generated_by": "di-labs-lists-generator",
  "list_count": 16,
  "total_items": 4224,
  "upstream_count": 15,
  "upstreams": {
    "https://community.antifilter.download/list/community.lst": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:24Z",
      "attempts": 1,
      "bytes": 14392,
      "duration_ms": 241
    },
    "https://community.antifilter.download/list/domains.lst": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:25Z",
      "attempts": 1,
      "bytes": 7337,
      "duration_ms": 173
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS13414": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:28Z",
      "attempts": 1,
      "bytes": 3764,
      "duration_ms": 258
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS15169": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:27Z",
      "attempts": 1,
      "bytes": 158034,
      "duration_ms": 282
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS2906": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:28Z",
      "attempts": 1,
      "bytes": 60949,
      "duration_ms": 703
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS32934": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:26Z",
      "attempts": 1,
      "bytes": 64845,
      "duration_ms": 233
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS36040": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:27Z",
      "attempts": 1,
      "bytes": 17420,
      "duration_ms": 144
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS396982": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:27Z",
      "attempts": 1,
      "bytes": 416420,
      "duration_ms": 528
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS40027": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:29Z",
      "attempts": 1,
      "bytes": 5409,
      "duration_ms": 267
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS44907": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:25Z",
      "attempts": 1,
      "bytes": 985,
      "duration_ms": 142
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS55095": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:29Z",
      "attempts": 1,
      "bytes": 6356,
      "duration_ms": 138
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS59930": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:25Z",
      "attempts": 1,
      "bytes": 987,
      "duration_ms": 139
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS62014": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:25Z",
      "attempts": 1,
      "bytes": 1537,
      "duration_ms": 143
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS62041": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:25Z",
      "attempts": 1,
      "bytes": 3427,
      "duration_ms": 173
    },
    "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS63293": {
      "status": "ok",
      "checked_at": "2026-08-02T10:05:26Z",
      "attempts": 1,
      "bytes": 21147,
      "duration_ms": 144
    }
  },
  "lists": [
    {
      "name": "antifilter-community",
      "title": "Antifilter community",
      "type": "cidr",
      "routeros_list": "antifilter-community",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 884,
      "count_v4": 884,
      "count_v6": 0,
      "sources": [
        {
          "source": "https://community.antifilter.download/list/community.lst",
          "kind": "url",
          "url": "https://community.antifilter.download/list/community.lst",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:24Z",
          "attempts": 1,
          "bytes": 14392,
          "duration_ms": 241,
          "count": 884
        }
      ],
      "warning": "Community list; reviewed by Antifilter community, but still use as a broad routing list."
    },
    {
      "name": "antifilter-community-domains",
      "title": "Antifilter community domains",
      "type": "domain",
      "routeros_list": "antifilter-domains",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 484,
      "count_v4": null,
      "count_v6": null,
      "sources": [
        {
          "source": "https://community.antifilter.download/list/domains.lst",
          "kind": "url",
          "url": "https://community.antifilter.download/list/domains.lst",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:25Z",
          "attempts": 1,
          "bytes": 7337,
          "duration_ms": 173,
          "count": 484
        }
      ],
      "warning": "FQDN/domain list. Good as an optional domain-based bypass source; not included in antifilter-plus CIDR aggregate."
    },
    {
      "name": "telegram",
      "title": "Telegram",
      "type": "cidr",
      "routeros_list": "telegram",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 12,
      "count_v4": 8,
      "count_v6": 4,
      "sources": [
        {
          "source": "AS62041",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS62041",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:25Z",
          "attempts": 1,
          "bytes": 3427,
          "duration_ms": 173,
          "count": 25
        },
        {
          "source": "AS44907",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS44907",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:25Z",
          "attempts": 1,
          "bytes": 985,
          "duration_ms": 142,
          "count": 3
        },
        {
          "source": "AS59930",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS59930",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:25Z",
          "attempts": 1,
          "bytes": 987,
          "duration_ms": 139,
          "count": 3
        },
        {
          "source": "AS62014",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS62014",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:25Z",
          "attempts": 1,
          "bytes": 1537,
          "duration_ms": 143,
          "count": 8
        }
      ],
      "warning": "Good fit for RouterOS policy routing; Antifilter community already contains the main Telegram IPv4 ranges too."
    },
    {
      "name": "meta",
      "title": "Meta / Facebook / Instagram / WhatsApp",
      "type": "cidr",
      "routeros_list": "meta",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 115,
      "count_v4": 75,
      "count_v6": 40,
      "sources": [
        {
          "source": "AS32934",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS32934",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:26Z",
          "attempts": 1,
          "bytes": 64845,
          "duration_ms": 233,
          "count": 559
        },
        {
          "source": "AS63293",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS63293",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:26Z",
          "attempts": 1,
          "bytes": 21147,
          "duration_ms": 144,
          "count": 175
        }
      ],
      "warning": "Broad Meta/Facebook list; includes more than Instagram/Facebook only."
    },
    {
      "name": "google",
      "title": "Google / Google Cloud",
      "type": "cidr",
      "routeros_list": "google",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 652,
      "count_v4": 578,
      "count_v6": 74,
      "sources": [
        {
          "source": "AS15169",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS15169",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:27Z",
          "attempts": 1,
          "bytes": 158034,
          "duration_ms": 282,
          "count": 1414
        },
        {
          "source": "AS396982",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS396982",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:27Z",
          "attempts": 1,
          "bytes": 416420,
          "duration_ms": 528,
          "count": 3751
        }
      ],
      "warning": "Very broad: includes Google services far beyond search/Gmail/Gemini. YouTube can still use general Google/CDN infrastructure, so this is a best-effort split rather than a perfect product boundary."
    },
    {
      "name": "youtube",
      "title": "YouTube / Google video CDN",
      "type": "cidr",
      "routeros_list": "youtube",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 146,
      "count_v4": 113,
      "count_v6": 33,
      "sources": [
        {
          "source": "AS15169",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS15169",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:27Z",
          "attempts": 1,
          "bytes": 158034,
          "duration_ms": 282,
          "count": 1414
        },
        {
          "source": "AS36040",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS36040",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:27Z",
          "attempts": 1,
          "bytes": 17420,
          "duration_ms": 144,
          "count": 147
        }
      ],
      "warning": "Practical, not perfectly isolated: YouTube frequently uses Google core AS15169. This list can route some non-YouTube Google core services, but it does not include the broader Google Cloud/edge AS396982 set published in google.rsc."
    },
    {
      "name": "youtube-narrow",
      "title": "YouTube narrow / AS36040 only",
      "type": "cidr",
      "routeros_list": "youtube-narrow",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 75,
      "count_v4": 53,
      "count_v6": 22,
      "sources": [
        {
          "source": "AS36040",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS36040",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:27Z",
          "attempts": 1,
          "bytes": 17420,
          "duration_ms": 144,
          "count": 147
        }
      ],
      "warning": "Experimental: less likely to route unrelated Google traffic, but known to miss some real YouTube/googlevideo/ytimg paths. Prefer youtube.rsc when playback stalls."
    },
    {
      "name": "youtube-domains",
      "title": "YouTube domains",
      "type": "domain",
      "routeros_list": "youtube-domains",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 25,
      "count_v4": null,
      "count_v6": null,
      "sources": [
        {
          "source": "generate_lists.py",
          "kind": "local",
          "status": "local",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 25
        }
      ],
      "warning": "Exact FQDN list only: RouterOS does not wildcard-match *.googlevideo.com, and clients using DoH/DoT or external DNS can bypass router-visible FQDN learning."
    },
    {
      "name": "x-twitter",
      "title": "X / Twitter",
      "type": "cidr",
      "routeros_list": "x-twitter",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 14,
      "count_v4": 11,
      "count_v6": 3,
      "sources": [
        {
          "source": "AS13414",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS13414",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:28Z",
          "attempts": 1,
          "bytes": 3764,
          "duration_ms": 258,
          "count": 28
        }
      ],
      "warning": "May not cover every CDN edge used by X/Twitter outside its own ASN."
    },
    {
      "name": "netflix",
      "title": "Netflix",
      "type": "cidr",
      "routeros_list": "netflix",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 21,
      "count_v4": 14,
      "count_v6": 7,
      "sources": [
        {
          "source": "AS2906",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS2906",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:28Z",
          "attempts": 1,
          "bytes": 60949,
          "duration_ms": 703,
          "count": 529
        },
        {
          "source": "AS40027",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS40027",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:29Z",
          "attempts": 1,
          "bytes": 5409,
          "duration_ms": 267,
          "count": 40
        },
        {
          "source": "AS55095",
          "kind": "ripe-asn",
          "url": "https://stat.ripe.net/data/announced-prefixes/data.json?resource=AS55095",
          "status": "ok",
          "checked_at": "2026-08-02T10:05:29Z",
          "attempts": 1,
          "bytes": 6356,
          "duration_ms": 138,
          "count": 49
        }
      ],
      "warning": "Mainly Netflix/Open Connect; some app/API/CDN paths can still use third-party networks."
    },
    {
      "name": "antifilter-plus",
      "title": "Antifilter Plus",
      "type": "cidr",
      "routeros_list": "antifilter-plus",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 1639,
      "count_v4": 1489,
      "count_v6": 150,
      "sources": [
        {
          "source": "list:antifilter-community",
          "kind": "aggregate",
          "status": "derived",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 884
        },
        {
          "source": "list:telegram",
          "kind": "aggregate",
          "status": "derived",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 12
        },
        {
          "source": "list:meta",
          "kind": "aggregate",
          "status": "derived",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 115
        },
        {
          "source": "list:google",
          "kind": "aggregate",
          "status": "derived",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 652
        },
        {
          "source": "list:youtube",
          "kind": "aggregate",
          "status": "derived",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 146
        },
        {
          "source": "list:x-twitter",
          "kind": "aggregate",
          "status": "derived",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 14
        },
        {
          "source": "list:netflix",
          "kind": "aggregate",
          "status": "derived",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 21
        }
      ],
      "warning": "Does not include domain/FQDN lists: antifilter-community-domains, youtube-domains, ai, openai, claude, gemini or custom-domains. Import them separately when rules reference those address-list names. Telegram CIDRs are inside antifilter-plus, but telegram.rsc is still useful when rules explicitly match address-list=telegram, for example router-originated Telegram Bot API/SOCKS traffic."
    },
    {
      "name": "openai-domains",
      "title": "OpenAI / ChatGPT domains",
      "type": "domain",
      "routeros_list": "openai",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 36,
      "count_v4": null,
      "count_v6": null,
      "sources": [
        {
          "source": "generate_lists.py",
          "kind": "local",
          "status": "local",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 36
        }
      ],
      "warning": "Domain/FQDN list: underlying IPs can be Google/Cloudflare/AWS/Azure and change frequently."
    },
    {
      "name": "claude-domains",
      "title": "Anthropic / Claude domains",
      "type": "domain",
      "routeros_list": "claude",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 6,
      "count_v4": null,
      "count_v6": null,
      "sources": [
        {
          "source": "generate_lists.py",
          "kind": "local",
          "status": "local",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 6
        }
      ],
      "warning": "Domain/FQDN list: underlying IPs can be Cloudflare/AWS/GCP and change frequently."
    },
    {
      "name": "gemini-domains",
      "title": "Google Gemini domains",
      "type": "domain",
      "routeros_list": "gemini",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 6,
      "count_v4": null,
      "count_v6": null,
      "sources": [
        {
          "source": "generate_lists.py",
          "kind": "local",
          "status": "local",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 6
        }
      ],
      "warning": "Domain/FQDN list; Google IPs overlap with broad google/youtube CIDR lists."
    },
    {
      "name": "ai-domains",
      "title": "AI services domains: Gemini / ChatGPT / Claude",
      "type": "domain",
      "routeros_list": "ai",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 48,
      "count_v4": null,
      "count_v6": null,
      "sources": [
        {
          "source": "generate_lists.py",
          "kind": "local",
          "status": "local",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 48
        }
      ],
      "warning": "Combined AI FQDN list. For per-vendor routing, use openai.rsc, claude.rsc and gemini.rsc."
    },
    {
      "name": "custom-domains",
      "title": "Custom domains",
      "type": "domain",
      "routeros_list": "custom-domains",
      "status": "ok",
      "generated_at": "2026-08-02T10:05:24Z",
      "count": 61,
      "count_v4": null,
      "count_v6": null,
      "sources": [
        {
          "source": "telegram-bot-manual",
          "kind": "manual",
          "status": "local",
          "checked_at": "2026-08-02T10:05:24Z",
          "count": 61
        }
      ],
      "warning": "Exact FQDN list. Add domains via @di_labs_lists_bot; RouterOS imports custom-domains.rsc on Maverick-MK every 12 hours."
    }
  ],
  "checksum_algorithm": "SHA-256",
  "checksums": {
    "text": "/checksums.txt",
    "json": "/checksums.json",
    "manifest_fields": "lists[].files[].sha256"
  },
  "notes": [
    "Static status snapshot from the latest successful generation.",
    "FQDN lists are local/static domain sources unless a domain_urls source is shown.",
    "cache-fallback means a public source failed and the previous published list was reused.",
    "SHA-256 checksums are published in /checksums.txt, /checksums.json and manifest list file entries.",
    "Google/YouTube split: youtube is practical AS15169+AS36040 without broad AS396982; youtube-narrow is AS36040-only experiment; youtube-domains is exact-FQDN helper data."
  ]
}
